Problem
Original anzeigen (Englisch)Beginne mit n. Ist n gerade, teile es durch 2; ist n ungerade, multipliziere es mit 3 und addiere 1. Wiederhole dies, bis der Wert 1 erreicht ist. Sowohl der Startwert als auch die abschließende 1 sollen in der Antwort enthalten sein.
Implementiere collatz_sequence(n).
Eingabe
n: Die positive Startzahl.
Ausgabe
Gib die vollständige Folge in der richtigen Reihenfolge zurück.
Einschränkungen
1 ≤ n ≤ 10.000. Für alle Eingaben in diesem Bereich wird unter dieser Regel 1 erreicht; alle Werte der Folge passen in einen vorzeichenbehafteten 64-Bit-Integer.
Beispiele
Eingabe:
n = 6
Erwartete Ausgabe:
expected = [6, 3, 10, 5, 16, 8, 4, 2, 1]
Eingabe:
long long n = 6;
Erwartete Ausgabe:
std::vector<long long> expected = {6, 3, 10, 5, 16, 8, 4, 2, 1};
Eingabe:
long n = 6;
Erwartete Ausgabe:
long[] expected = new long[] {6, 3, 10, 5, 16, 8, 4, 2, 1};
Erläuterung
6 ist gerade, daher wird daraus 3. Dann wird aus 3 die 10. Wende die Regel weiter an, bis 1 erreicht ist.
Eingabe:
n = 1
Erwartete Ausgabe:
expected = [1]
Eingabe:
long long n = 1;
Erwartete Ausgabe:
std::vector<long long> expected = {1};
Eingabe:
long n = 1;
Erwartete Ausgabe:
long[] expected = new long[] {1};
Erläuterung
Der Startwert ist bereits 1, daher sind keine Umwandlungen nötig.
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.