Dies ist meine erste Frage, also hoffe ich, dass es gut geht.
Hintergrund:
Es sind nicht die Flüsse, an die Sie denken könnten. Die Frage dreht sich um das Konzept der digitalen Flüsse. Ein digitaler Fluss ist eine Folge von Zahlen , bei denen die Zahl hinter n
ist n
plus die Summe der Ziffern.
Erläuterung:
Auf 12345 folgt 12360, da 1 + 2 + 3 + 4 + 5 = 15, und 12345 + 15 ergibt 12360. In ähnlicher Weise folgt 145 auf 155. Wenn die erste Nummer eines digitalen Flusses lautet M
, nennen wir ihn Fluss M
.
Zum Beispiel: Fluss 480 ist der Sequenzbeginn {480.492.507.519 ....} und Fluss 483 ist der Sequenzbeginn {483.498.519, ....}. Normale Bäche und Flüsse können sich treffen, und das gilt auch für digitale Flüsse. Dies geschieht, wenn zwei digitale Flüsse dieselben Werte teilen.
Beispiel:
Der Fluss 480 trifft den Fluss 483 um 519. Der Fluss 480 trifft den Fluss 507 um 507 und trifft nie den Fluss 481. Jeder digitale Fluss trifft schließlich auf den Fluss 1, den Fluss 3 oder den Fluss 9.
Schreiben Sie ein Programm, das für eine bestimmte Ganzzahl n
den Wert bestimmen kann, bei dem der Fluss n
zuerst auf einen dieser drei Flüsse trifft.
Eingang
Die Eingabe kann mehrere Testfälle enthalten. Jeder Testfall belegt eine separate Zeile und enthält eine Ganzzahl n
( 1 <= n <= 16384
). Ein Testfall mit dem Wert 0
für n
beendet die Eingabe und dieser Testfall darf nicht verarbeitet werden.
Ausgabe
Geben Sie für jeden Testfall in der Eingabe zuerst die Testfallnummer (ab 1) aus, wie in der Beispielausgabe gezeigt. Dann wird auf einer separaten Zeilenausgabe die Zeile "trifft zuerst auf den Fluss x bei y". Hier ist y der niedrigste Wert, bei dem der Fluss n
zuerst auf den Fluss trifft x
(x = 1 oder 3 oder 9). Wenn Fluss n
trifft Fluss x
an y
für mehr als einen Wert von x
, Ausgabe der niedrigste Wert. Drucken Sie eine leere Zeile zwischen zwei aufeinander folgenden Testfällen.
Testfall
Eingang:
86
12345
0
Ausgabe:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
Wertung:
Der schnellste Algorithmus gewinnt. Im Falle einer Krawatte. Der mit dem kürzeren Code gewinnt.
Vielen Dank an mbomb007 für den Hinweis auf meinen Fehler.
ps: Ich möchte eher die schnellste als die kleinste Lösung haben. Ich habe auch eine Lösung von mir, die langsam ist. Dafür schauen Sie hier .
Hinweis:
Ich werde dies für Code-Tests verwenden. Und Leistungsprüfung.
M
, nennen wir ihn FlussM
" ist aus zwei Gründen nicht sinnvoll: Erstens, wenn ein Fluss eine unendliche Folge von Zahlen ist, hat er keine letzte Ziffer; und zweitens bedeutet Fluss im nächsten Absatz den FlussM
, der bei Nummer beginnt M
.