Ihre Aufgabe ist gegeben x
, Ausgabe 2*x
. Einfach richtig!? Aber es gibt einen Haken: x
Wird als (möglicherweise unendlicher) fortgesetzter Bruch angegeben , und die Ausgabe muss ein fortgesetzter Bruch sein. Die Eingabe ist garantiert eine echte algebraische Zahl, deren Grad höchstens 2 beträgt.
Eingabe : Der fortgesetzte Bruchteil von x
. Dies ist in drei Teile unterteilt: den ganzzahligen Teil, das Präfix und den sich wiederholenden Teil. Der ganzzahlige Teil besteht aus einer einzelnen ganzen Zahl. Das Präfix und der Wiederholungsteil sind (möglicherweise leere) Arrays positiver Ganzzahlen, die das Präfix und den Wiederholungsteil des fortgesetzten Bruchs beschreiben. Beispielsweise (3, [1], [2, 4])
repräsentiert die Eingabe den fortgesetzten Bruch [3; 1, 2, 4, 2, 4, ...]
.
Wenn der Wiederholungsteil leer ist, gibt dies eine rationale Zahl an. Zum Beispiel (3, [1, 2], [])
repräsentiert [3; 1, 2] = 11/3
. Sie müssen beide Formen einer rationalen Zahl akzeptieren (dh (3, [1, 1, 1], [])
die muss [3; 1, 1, 1] = 11/3
auch eine gültige Eingabe sein).
Ausgabe : Gibt den fortgesetzten Bruchteil der doppelten Eingabe im gleichen Format wie die Eingabe aus. Wenn die Ausgabe rational ist, können Sie jede Form des fortgesetzten Bruchs ausgeben. Solange die Antwort der richtigen entspricht, ist sie in Ordnung. es ist keine "Komprimierung" erforderlich, so dass der unendliche Teil möglicherweise ein wenig "abgerollt" wird (z. B. [1; 4, 2, 3, 2, 3...]
geschrieben (1, [4], [2, 3])
oder (1, [4, 2, 3], [2, 3])
). Alle Antworten müssen exakt sein.
Testfälle : Der Einfachheit halber wird die genaue Formularspalte angegeben.
Input Exact Form Output
(0, [] []) 0 (0, [] []) or (-1, [1], [])
(-5, [1, 1], []) -4.5 (-9, [], []) or (-10, [1], [])
(3, [1, 2], []) 11/3 (7, [3], []) or (7, [2, 1], [])
(1, [], [2]) sqrt(2) (2, [], [1, 4])
(-1, [2], [2, 1]) -1/sqrt(3) (-2, [1, 5], [2, 6])
Und schließlich ein etwas größerer Testfall Präzision zu gewährleisten: (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])
.
Kürzester Code gewinnt!
Tipp : Sie können mit fortlaufenden Brüchen, wie hier beschrieben, auf einfache Weise rechnen . Das Verdoppeln eines fortgesetzten Bruchs ist nur ein Sonderfall dieses Algorithmus (obwohl es schwierig sein kann, herauszufinden, wann sich der fortgesetzte Bruch wiederholt).
Sqrt[2]
.
[3; 1, 1, 1]
würde (3, [1, 1, 1], [])
in dem Eingabeformat sein, das wir verwenden - daher sollte die Frage es wahrscheinlich in diesem Format erwähnen (im dritten Absatz), nur um Klarheit zu gewährleisten.
(-2, [1, 5, 2], [6, 2])
eine akzeptable Ausgabe für die Eingabe (-1, [2], [2, 1])
? Wie wäre es (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?