Esta es mi primera pregunta, así que espero que salga bien.
Antecedentes:
No es en los ríos en lo que podrías estar pensando. La pregunta gira en torno al concepto de ríos digitales. Un río digital es una secuencia de números donde el número siguiente n
es n
más la suma de sus dígitos.
Explicación:
12345 es seguido por 12360 ya que 1 + 2 + 3 + 4 + 5 = 15 y 12345 + 15 da 12360. igualmente 145 es seguido por 155. Si el primer número de un río digital es M
lo llamaremos río M
.
Por ejemplo: River 480 es la secuencia que comienza {480,492,507,519 ....}, y river 483 es la secuencia que comienza {483,498,519, ....}. Las corrientes y ríos normales pueden encontrarse, y lo mismo es cierto para los ríos digitales. Esto sucede cuando dos ríos digitales comparten algunos de los mismos valores.
Ejemplo:
El río 480 se encuentra con el río 483 en 519. El río 480 se encuentra con el río 507 en 507 y nunca se encuentra con el río 481. Todos los ríos digitales eventualmente se encontrarán con el río 1, el río 3 o el río 9.
Escriba un programa que pueda determinar para un entero dado n
el valor donde el río se n
encuentra primero con uno de estos tres ríos.
Entrada
La entrada puede contener múltiples casos de prueba. Cada caso de prueba ocupa una línea separada y contiene un número entero n
( 1 <= n <= 16384
). Un caso de prueba con el valor 0
for n
termina la entrada y este caso de prueba no debe procesarse.
Salida
Para cada caso de prueba en la entrada, primero envíe el número de caso de prueba (comenzando desde 1) como se muestra en la salida de muestra. Luego, en una salida de línea separada, la línea "primero se encuentra con el río x en y". Aquí y es el valor más bajo donde el río se n
encuentra primero con el río x
(x = 1 o 3 o 9). Si el río se n
encuentra con el río x
a y
más de un valor de x
, arroje el valor más bajo. Imprima una línea en blanco entre dos casos de prueba consecutivos.
Caso de prueba
Entrada:
86
12345
0
Salida:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
Puntuación:
El algoritmo más rápido gana. En caso de empate. El que tenga un código más corto ganará.
Gracias a mbomb007 por señalar mi error.
ps: quiero tener la solución más rápida en lugar de la más pequeña. También tengo una solución mía que es lenta. Por eso mira aquí .
Nota:
Me va a utilizar esto para las pruebas de código. Y comprobación de rendimiento.
M
lo llamaremos ríoM
" no tiene sentido por dos razones: en primer lugar, si un río es una secuencia infinita de números, entonces no tiene un último dígito; y en segundo lugar, en el siguiente párrafo, ríoM
significa el río que comienza en el número M
.