Ceci est ma première question, donc j'espère que cela se passera bien.
Contexte:
Ce ne sont pas les rivières auxquelles vous pensez. La question tourne autour du concept de rivières numériques. Une rivière numérique est une séquence de nombres où le nombre suivant n
est n
plus la somme de ses chiffres.
Explication:
12345 est suivi de 12360 puisque 1 + 2 + 3 + 4 + 5 = 15 et donc 12345 + 15 donne 12360. de même 145 est suivi de 155. Si le premier numéro d'une rivière numérique est M
nous l'appellerons rivière M
.
Par exemple: River 480 est la séquence commençant {480,492,507,519 ....}, et river 483 est la séquence commençant {483,498,519, ....}. Les ruisseaux et rivières normaux peuvent se rencontrer, et il en va de même pour les rivières numériques. Cela se produit lorsque deux rivières numériques partagent certaines des mêmes valeurs.
Exemple:
La rivière 480 rencontre la rivière 483 à 519. La rivière 480 rencontre la rivière 507 à 507 et ne rencontre jamais la rivière 481. Chaque rivière numérique finira par rencontrer la rivière 1, la rivière 3 ou la rivière 9.
Écrivez un programme qui peut déterminer pour un entier donné n
la valeur où la rivière n
rencontre d'abord l'une de ces trois rivières.
Contribution
L'entrée peut contenir plusieurs cas de test. Chaque scénario de test occupe une ligne distincte et contient un entier n
( 1 <= n <= 16384
). Un scénario de test avec la valeur de 0
pour n
termine l'entrée et ce scénario de test ne doit pas être traité.
Production
Pour chaque scénario de test dans la première sortie d'entrée, le numéro du scénario de test (à partir de 1), comme indiqué dans l'exemple de sortie. Ensuite, sur une sortie de ligne distincte, la ligne "rencontre d'abord la rivière x en y". Ici, y est la valeur la plus faible où la rivière n
rencontre la rivière pour la première fois x
(x = 1 ou 3 ou 9). Si la rivière n
rencontre la rivière x
à y
plus d'une valeur de x
, émettez la valeur la plus basse. Imprimez une ligne vierge entre deux cas de test consécutifs.
Cas de test
Contribution:
86
12345
0
Production:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
Notation:
L'algorithme le plus rapide gagne. En cas d'égalité. Celui avec un code plus court gagnera.
Merci à mbomb007 d' avoir signalé mon erreur.
ps: Je veux avoir la solution la plus rapide plutôt que la plus petite. J'ai également une de mes solutions qui est lente. Pour cela, regardez ici .
Remarque:
Je vais utiliser ce pour les tests de code. Et la vérification des performances.
M
nous l'appellerons rivièreM
" n'a pas de sens pour deux raisons: premièrement, si une rivière est une séquence infinie de nombres, alors elle n'a pas de dernier chiffre; et deuxièmement, dans le paragraphe suivant, rivièreM
signifie la rivière commençant au numéro M
.