Esta é a minha primeira pergunta, por isso espero que corra bem.
Fundo:
Não são os rios que você pode estar pensando. A questão gira em torno do conceito de rios digitais. Um rio digital é uma sequência de números em que o número a seguir n
é n
mais a soma de seus dígitos.
Explicação:
12345 é seguido por 12360, já que 1 + 2 + 3 + 4 + 5 = 15 e, portanto, 12345 + 15 fornece 12360. Da mesma forma, 145 é seguido por 155. Se o primeiro número de um rio digital for M
, o chamaremos de rio M
.
Por exemplo: rio 480 é o início da sequência {480,492,507,519 ....} e rio 483 é a sequência que começa {483,498,519, ....}. Córregos e rios normais podem se encontrar, e o mesmo vale para rios digitais. Isso acontece quando dois rios digitais compartilham alguns dos mesmos valores.
Exemplo:
O rio 480 encontra o rio 483 em 519. O rio 480 encontra o rio 507 em 507 e nunca encontra o rio 481. Todo rio digital acaba encontrando o rio 1, o rio 3 ou o rio 9.
Escreva um programa que possa determinar para um número inteiro n
o valor em que o rio n
encontra primeiro um desses três rios.
Entrada
A entrada pode conter vários casos de teste. Cada caso de teste ocupa uma linha separada e contém um número inteiro n
( 1 <= n <= 16384
). Um caso de teste com o valor de 0
for n
finaliza a entrada e esse caso de teste não deve ser processado.
Resultado
Para cada caso de teste na entrada, primeiro imprima o número do caso de teste (começando em 1), como mostrado na saída de amostra. Em uma saída de linha separada, a linha "encontra primeiro o rio x em y". Aqui y é o valor mais baixo onde o rio n
encontra o rio pela primeira vez x
(x = 1 ou 3 ou 9). Se o rio n
encontrar o rio x
com y
mais de um valor de x
, produza o valor mais baixo. Imprima uma linha em branco entre dois casos de teste consecutivos.
Caso de teste
Entrada:
86
12345
0
Resultado:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
Pontuação:
O algoritmo mais rápido vence. Em caso de empate. Aquele com código mais curto vencerá.
Obrigado a mbomb007 por apontar o meu erro.
ps: Eu quero ter a solução mais rápida do que a menor. Eu também tenho uma solução minha que é lenta. Para esse olhar aqui .
Nota:
Vou usar isso para teste de código. E verificação de desempenho.
M
o nome de rioM
" não faz sentido por duas razões: primeiro, se um rio é uma sequência infinita de números, ele não tem um último dígito; e segundo, no próximo parágrafo rioM
significa o rio começando em número M
.