Bis zur High School war ich der Beste in Mathematik und habe es geliebt. Als ich jedoch an eine Universität für freie Künste kam, lebte ich ein Leben weit weg von Mathematik. Und es ist 10 Jahre her, seit ich Mitglied der Gesellschaft geworden bin ... Ich bin ein Systemingenieur, der nur die linke Gehirnhälfte entwickelt hat und sowohl das Minutenintegral als auch die Dreiecksfunktion vergessen hat. Dank YouTube habe ich kürzlich meine Chancen, mit Mathematik in Kontakt zu kommen, schrittweise erhöht. Es ist ein guter Zeitpunkt, um Fragen zu Aufnahmeprüfungen zu lösen und die unbekannte Welt der Universitätsmathematik zu berühren.
Heute über die Ganzzahl "** Capreca-Zahl **" mit interessanten Eigenschaften im folgenden Video vorgestellt Wir werden dies mit Ruby überprüfen.
Die Kaprekar-Zahl ist eine Ganzzahl, die durch eine der folgenden Angaben definiert ist:
Quelle: Wikipedia
Dieses Mal werden wir uns Definition 2 ansehen.
Nehmen Sie als Beispiel ** 495 **.
Die maximale Anzahl, die durch Neuanordnung von 495 vorgenommen werden kann, beträgt 954, und die minimale Anzahl beträgt 459. 954 - 459 = 495, also entspricht es jetzt der ursprünglichen Nummer ** 495 **! Es ist interessant!
Eine solche Nummer wird als Capreca-Nummer bezeichnet. Die Anzahl der Ziffern, die wir normalerweise sehen, ist nur zählbar.
Kommen wir nun zum Hauptprogramm von Ruby.
kaprekar.rb
num = 627
#Im Array speichern
arr = num.to_s.split('').map!(&:to_i)
p arr # => [6, 2, 7]
#Sortieren, um Maximum und Minimum zu machen
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
#maximal-Feststellen, ob das Minimum mit der ursprünglichen Zahl übereinstimmt
diff = max - min
p diff == num # => false
Durch Umschreiben von num
ist es nun möglich, ** nur eine beliebige ganze Zahl ** zu beurteilen.
Verwenden Sie von hier aus die iterative Verarbeitung, um herauszufinden, ob eine Capreca-Nummer innerhalb eines bestimmten Bereichs liegt.
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("Unzutreffend")
end
puts result
(Zur besseren Lesbarkeit wage ich es nicht, den ternären Operator zu verwenden.)
terminal
【495】 954 - 459 = 495
【6174】 7641 - 1467 = 6174
【549945】 995544 - 445599 = 549945
【631764】 766431 - 134667 = 631764
Im obigen Beispiel habe ich beim Versuch mit bis zu 6-stelligen Ganzzahlen 4 Capreca-Zahlen gefunden. Es ist auch seltsam, dass es nicht in 5 Ziffern existiert!
Dies hängt von den technischen Daten des PCs ab, die Verarbeitung dauert jedoch 1 Million Mal.
Schauen Sie sich die am Anfang eingeführte Nummer 495 an Sie haben einen mathematischen Sinn, als Sie sofort 495 = 99 × 5 gefunden haben. Ja, alle Capreca-Zahlen sind ** 9 Vielfache **.
Selbst wenn Sie dies nicht 1 Million Mal tun, können Sie die Verarbeitung noch weiter reduzieren, indem Sie nur ein Vielfaches von 9 überprüfen.
Wenn Sie eine bessere Möglichkeit haben, es zu schreiben, lassen Sie es uns in den Kommentaren wissen!
** (Hinzugefügt am 29.06.2020) ** Ich habe sofort einen Kommentar erhalten und die verbesserte Version im Kommentarbereich gepostet!
Recommended Posts