Ich habe versucht, mit Ruby festzustellen, ob eine Ganzzahl innerhalb eines bestimmten Bereichs eine Capreca-Zahl enthält

Hintergrund

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.

Wie viele Capreca gibt es?

Die Kaprekar-Zahl ist eine Ganzzahl, die durch eine der folgenden Angaben definiert ist:

  1. Der Wert, der im Quadrat dem ursprünglichen Wert entspricht, und die Summe wird in den vorderen und den hinteren Teil unterteilt.
  2. Der Wert, der dem ursprünglichen Wert entspricht, wenn die Differenz zwischen den maximalen und minimalen Ziffern durch Umordnen der Ziffern ermittelt wird.

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.

Bestimmen Sie, ob eine Ganzzahl die Anzahl der Capreca ist

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.

Stellen Sie fest, ob die Anzahl der Capreca innerhalb eines bestimmten Bereichs liegt

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!

Beiseite

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

Ich habe versucht, mit Ruby festzustellen, ob eine Ganzzahl innerhalb eines bestimmten Bereichs eine Capreca-Zahl enthält
Ich habe die Anzahl der Taxis mit Ruby überprüft
Ich habe einen Interpreter (Compiler?) Mit ungefähr 80 Zeilen in Ruby erstellt.
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
Ich habe mit Gem in Ruby nach einem Webframework gesucht
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich habe ein Kalenderproblem mit Ruby versucht
Ich habe mit Ruby einen riskanten Würfel gemacht
So überprüfen Sie, ob eine Instanzvariable in einer Ruby-Klasse definiert ist
So starten Sie einen Index aus einer beliebigen Zahl in der iterativen Ruby-Verarbeitung