Jusqu'au lycée, j'étais le meilleur en mathématiques et j'adorais ça. Cependant, lorsque je suis entré dans une université d'arts libéraux, j'ai vécu une vie loin des mathématiques. Et cela fait 10 ans que je suis devenu membre de la société ... Je suis un ingénieur système qui n'a développé que le cerveau gauche, qui a oublié à la fois l'intégrale minute et la fonction triangulaire. Récemment, grâce à YouTube, j'ai progressivement augmenté mes chances d'entrer en contact avec les mathématiques. C'est le bon moment pour résoudre les questions d'examen d'entrée et n'hésitez pas à toucher le monde inconnu des mathématiques universitaires.
Aujourd'hui, à propos de l'entier "** nombre de Capreca **" avec des propriétés intéressantes présentées dans la vidéo suivante Nous vérifierons en utilisant Ruby.
Le nombre Kaprekar est un entier défini par l'un des éléments suivants:
Source: Wikipedia
Cette fois, nous examinerons la définition 2.
Prenons ** 495 ** comme exemple.
Le nombre maximum qui peut être fait en réorganisant 495 est 954 et le nombre minimum est 459. 954 --459 = 495, il est donc maintenant égal au nombre d'origine ** 495 **! c'est intéressant!
Un tel nombre s'appelle le nombre capreca, Le nombre de chiffres que nous voyons habituellement est uniquement dénombrable.
Passons maintenant au programme principal Ruby.
kaprekar.rb
num = 627
#Stocker dans la baie
arr = num.to_s.split('').map!(&:to_i)
p arr # => [6, 2, 7]
#Trier pour faire le maximum et le minimum
max = arr.sort{ |a, b| a <=> b }.join('').to_i
min = arr.sort{ |a, b| b <=> a }.join('').to_i
p max # => 762
p min # => 267
#maximum-Déterminer si le minimum est le même que le nombre d'origine
diff = max - min
p diff == num # => false
Maintenant, en réécrivant «num», vous pouvez juger ** un seul entier arbitraire **.
À partir de là, utilisons le traitement itératif pour savoir s'il existe un nombre Capreca dans ** une plage particulière **.
kaprekar.rb
result = []
num = 1
final = 1_000_000
while num < final do
arr = num.to_s.split('').map!(&:to_i)
min = arr.sort{ |a, b| a <=> b }.join('').to_i
max = arr.sort{ |a, b| b <=> a }.join('').to_i
diff = max - min
if diff == num
result.push("【#{num}】 #{max} - #{min} = #{diff}")
end
num += 1
end
if result.empty?
result.push("N'est pas applicable")
end
puts result
(Pour la lisibilité, je n'ose pas utiliser l'opérateur ternaire)
terminal
【495】 954 - 459 = 495
【6174】 7641 - 1467 = 6174
【549945】 995544 - 445599 = 549945
【631764】 766431 - 134667 = 631764
Dans l'exemple ci-dessus, lorsque j'ai essayé avec jusqu'à 6 nombres entiers, j'ai trouvé 4 nombres capreca. Il est également étrange qu'il n'existe pas à 5 chiffres!
Cela dépend des spécifications du PC, mais il faudra beaucoup de temps pour le traiter 1 million de fois.
Regardez le nombre 495 introduit au début Vous avez un sens mathématique lorsque vous avez immédiatement trouvé 495 = 99 × 5. Oui, tous les nombres capreca sont ** 9 multiples **.
Ainsi, même si vous ne le faites pas 1 million de fois, vous pouvez réduire encore plus le traitement en ne vérifiant que les multiples de 9.
Si vous avez une meilleure façon de l'écrire, faites-le nous savoir dans les commentaires!
** (Ajouté le 29/06/2020) ** J'ai reçu un commentaire immédiatement et posté la version améliorée dans la section des commentaires!
Recommended Posts