In der Collatz-Sequenz (auch als 3x + 1-Problem bezeichnet) beginnen Sie mit einer beliebigen positiven Ganzzahl. In diesem Beispiel verwenden wir 10 und wenden diese Schritte darauf an:
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10 ist gerade, also dividieren wir durch 2, um 5 zu erhalten. 5 ist ungerade, also multiplizieren wir mit 3 und addieren 1, um 16 zu erhalten. 16 ist gerade, also halbieren Sie es, um 8 zu erhalten. Die Hälfte von 8 ist 4, die Hälfte von 4 ist 2 und die Hälfte von 2 ist 1. Da dies 6 Schritte dauerte, sagen wir, dass 10 einen Bremsweg von 6 hat.
Eine Super-Collatz-Zahl ist eine Zahl, deren Bremsweg größer ist als der Bremsweg jeder kleineren Zahl. Beispielsweise ist 6 eine Super-Collatz-Zahl, da 6 einen Bremsweg von 8 hat, 5 einen Bremsweg von 5 hat, 4 2 hat, 3 7 hat, 2 1 hat und 1 0 hat. ( A006877 im OEIS) Sie müssen Nimm eine Zahl n als Eingabe und gib alle Super Collatz-Zahlen bis n aus .
Regeln
Volles Programm oder Funktion ist annehmbar.
Sie können die Super Collatz-Sequenz nicht vorberechnen oder hart codieren.
Sie können Eingaben in jedem vernünftigen Format vornehmen.
Die Ausgabe kann als Liste von der Funktion zurückgegeben oder in STDOUT oder eine Datei gedruckt werden. Was auch immer am bequemsten ist.
Ungültige Eingaben (Nichtzahlen, Dezimalzahlen, negative Zahlen usw.) führen zu undefiniertem Verhalten.
Probieren Sie ungolfed Python
def collatzDist(n):
if n == 1:
return 0
if n % 2 == 0:
return 1 + collatzDist(n / 2)
return 1 + collatzDist((n * 3) + 1)
n = input()
max = -1
superCollatz = []
for i in range(1, n + 1):
dist = collatzDist(i)
if dist > max:
superCollatz.append(i)
max = dist
print superCollatz
Beispiel IO:
#in #out
4 --> 1, 2, 3
50 --> 1, 2, 3, 6, 7, 9, 18, 25, 27
0 --> invalid
10000 --> 1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171
Auch hier sind die ersten 44 Super Collatz-Nummern:
1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239, 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935, 626331, 837799