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 nest nplus 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 Mnous 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é nla valeur où la rivière nrencontre 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 0pour ntermine 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 nrencontre la rivière pour la première fois x(x = 1 ou 3 ou 9). Si la rivière nrencontre la rivière xà yplus 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.
Mnous 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.