en C ++ Quelle sera la logique la plus rapide pour trouver le prochain palindrome d'un numéro de 15 chiffres donné? Par exemple, quel sera le prochain palindrome de: 134567329807541? P>
5 Réponses :
Je crois que c'est comme ça p>
C'est la même chose que je suis venu avec, donc +1.
Il y a un petit bug ici, je pense que ... Par exemple, jetez un coup d'œil sur ce qui arrive à l'entrée "13 5 09" (en utilisant un numéro à cinq chiffres pour plus de commodité). Le prochain palindrome est "13 5 31", mais l'algorithme donne "14 0 41". Pour résoudre ce problème, l'étape 2 devrait être: retournez la partie première i> la partie, et l'étape 3 devrait être: si elle est plus petite que la partie Dernière i>.
Un autre cas de bord à considérer est si l'entrée est le dernier palindrome à 15 chiffres ("999999999999999999999").
Il y a tellement de bugs que je doute que votre algorithme soit même utile. 1. Retournez la partie première i> et utilisez comme dernière partie. Si le résultat est plus grand que le numéro d'origine, vous êtes DON. 2. Si c'est plus petit, incrémentez la partie moyenne i>. 3. Si la partie centrale était de 9 (maintenant 10), faites-la à 0 et incrémentez la première partie.
Oh, j'ai oublié: dans le dernier cas, retournez la première partie incrémentée et utilisez-la comme la nouvelle partie dernière.
Je ne suis pas sur le point de ne rien mettre en œuvre, mais j'imagine que la logique serait: p>
Si la longueur est inégale, vous devez traiter le chiffre moyen séparément. Mais c'est assez trivial. P>
diviser le nombre en trois parties, 1345673 2 9807541 P> LI>
inverse si résultat: = 1345673 3 inverse (1345673) => 134567333765431 P> Li>
ul> tête code>,
moyen code>,
queue code> p> p> P>
tête code> et comparez-le à
queue code>
3765431 P> LI>
inverse (tête) <= la queue code> (s'ils sont égaux, l'entrée initiale est un palindrome et que vous voulez le suivant) p>
milieu <9 code>, incrément moyen li>
tête code> pièce et ensemble
MID: = 0 code> li>
ul> li>
tête inverse de la tête (tête) code>. p>
et que se passe-t-il si inverse (tête)> queue ??
C'est laissé comme un exercice :-)
Si inverse (tête)> la queue, vous continuez avec "résultat: = ..."
Et si vous avez même un nombre de chiffres?
@Cosminvacaoiu 15 n'est pas un nombre même.
Je pense que l'algo suivant devrait également fonctionner ..
Il est plus facile de mettre en œuvre également dans l'espoir que l'exemple suivant aidera à mieux comprendre l'algo p> Soit NOS: - 23469 9 12367 P> So HEAD -> 23469 MID -> 9 TAIL --> 12367
step 2:- 23469 9 +1 = 23470 0
(now HEAD -> 23470 MID -> 0 HEAD_REV -> 07432 )
oui il y a une faille !! Ex: - 34512 Head- 34 MID - 5 Tail- 12 Votre réponse 35553 Mais un pallindrome plus petit et une réponse correcte 34543 !!
Corriger l'algo devrait être, calculer la tête moyenne et la queue ... Si la tête> la tête de la queue - tête de tête à tête arrière-tête si la tête <= la queue - tête + 1 mi-inverse-tête + 1
Split the number into three parts head, mid and tail if reverse(head)>tail result := head mid reverse(head) else if reverse(head)= tail && mid<9 mid++ result := head mid tail else mid =0 head++ result := head mid reverse(head)
+1 question très intéressante, imo
Que signifie "le prochain palindrome de x"?
Un palindrome est quelque chose qui lit les mêmes verso et en avant (comme vous, espérons-le que vous saurez de l'esquisse du perroquet de Monty Python!), Je suppose que "le prochain palindrome de x" est le premier numéro> = x qui, dans la base 10, lit le même verso et en avant.
Vous avez déjà un certain nombre de réponses. Je veux juste souligner que, comme cela a un
c ++ code> tag,
std :: string code> (que vous devez utiliser) a beaucoup de fonctions membres pour manipuler son contenu. Malheureusement, pour des raisons historiques, certains d'entre eux travaillent avec des index, certains travaillent avec des itérateurs, de nombreux (mais pas tous) ont des versions pour les deux, beaucoup (mais pas tous) ont des algorithmes alternatifs dans le code> entête. Un bon moyen de inverser une séquence d'inverser les itérateurs d'accès aléatoire utilise
std :: inverse (inverse (inverse () code>, un bon moyen de comparer deux séquences arbitraires est
std :: égal () < / code>.
Je me demande: "Suivant" signifie-t-il que si vous avez déjà un palindrom, vous devriez obtenir le suivant ou vous contentez-vous?