Questa è la mia prima domanda, quindi spero che vada bene.
Sfondo:
Non sono i fiumi a cui potresti pensare. La domanda ruota attorno al concetto di fiumi digitali. Un fiume digitale è una sequenza di numeri in cui il numero seguente n
è n
più la somma delle sue cifre.
Spiegazione:
12345 è seguito da 12360 poiché 1 + 2 + 3 + 4 + 5 = 15 e quindi 12345 + 15 dà 12360. allo stesso modo 145 è seguito da 155. Se il primo numero di un fiume digitale è M
lo chiameremo fiume M
.
Ad esempio: il fiume 480 è la sequenza che inizia {480.492.507.519 ....} e il fiume 483 è la sequenza che inizia {483.498.519, ....}. Ruscelli e fiumi normali possono incontrarsi, e lo stesso vale per i fiumi digitali. Ciò accade quando due fiumi digitali condividono alcuni degli stessi valori.
Esempio:
Il fiume 480 incontra il fiume 483 a 519. Il fiume 480 incontra il fiume 507 a 507 e non incontra mai il fiume 481. Ogni fiume digitale alla fine incontrerà il fiume 1, il fiume 3 o il fiume 9.
Scrivi un programma che può determinare per un dato numero intero n
il valore in cui il fiume n
incontra per primo uno di questi tre fiumi.
Ingresso
L'input può contenere più casi di test. Ogni caso di test occupa una riga separata e contiene un numero intero n
( 1 <= n <= 16384
). Un caso di test con valore di 0
for n
termina l'input e questo caso di test non deve essere elaborato.
Produzione
Per ogni caso di test nell'ingresso, prima uscita il numero del caso di test (a partire da 1) come mostrato nell'output del campione. Quindi su una linea separata emette la linea "prima incontra il fiume x a y". Qui y è il valore più basso in cui river n
incontra prima river x
(x = 1 o 3 o 9). Se river n
incontra river x
a y
per più di un valore di x
, genera il valore più basso. Stampa una riga vuota tra due casi di test consecutivi.
Caso di prova
Ingresso:
86
12345
0
Produzione:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
punteggio:
Vince l'algoritmo più veloce. In caso di pareggio. Vincerà quello con un codice più breve.
Grazie a mbomb007 per aver segnalato il mio errore.
ps: voglio avere la soluzione più veloce piuttosto che la più piccola. Ho anche una mia soluzione che è lenta. Per quello sguardo qui .
Nota:
Userò questo per il test del codice. E controllo delle prestazioni.
M
la chiameremo fiumeM
" non ha senso per due ragioni: in primo luogo, se un fiume è una sequenza infinita di numeri, allora non ha un'ultima cifra; e in secondo luogo, nel paragrafo successivo riverM
indica il fiume che inizia con il numero M
.