si on leur donne un numéro à 15 chiffres Quelle est la meilleure façon de trouver la prochaine palindrome?
-
19-09-2019 - |
Question
dans c ++ ce sera la logique la plus rapide pour trouver la prochaine palindrome d'un 15 donné nombre de chiffres? par exemple ce que sera le prochain palindrome de: 134567329807541
La solution
-
Diviser le nombre en trois parties,
head
,mid
,tail
1345673 2 9807541
-
head
inverse et le comparer àtail
3765431 -
Si
reverse(head) <= tail
(si elles sont égales l'entrée initiale est un palindrome, et que vous voulez l'autre)- Si
mid < 9
, incrémenter mi - partie
head
incrément Else etmid := 0
set
- Si
-
. Résultat: =
head mid reverse(head)
1345673 3 inverse (1345673) => 134567333765431
Autres conseils
Je crois qu'il est comme ceci
- Diviser le nombre en trois parties 1345673 2 9807541
- Retournez le dernier 1457089
- Si elle est supérieure à la première partie (il est dans ce cas)
- firstpart ++
- middlepart = 0
- première partie retourner et remplacer la dernière partie.
Je ne suis pas sur le point de mettre en œuvre quoi que ce soit, mais j'imagine la logique serait:
- Split le nombre au milieu de la chaîne: X étant la partie gauche et Y étant la partie droite .
- Soit X »= {X + 1 si inverse (X)
- Le résultat est ensuite concat (X 'inverse (X'));
Si la longueur est inégale, il faut traiter le milieu chiffre séparément. Mais cela est tout à fait banal.
Je pense que le algo suivant devrait également fonctionner .. Il est plus facile à mettre en œuvre aussi
i) Divide the given nos into three parts HEAD MID TAIL
ii) Add 1 to number HEAD MID
(in case of carry, follow basic addition rules)
iii) reverse the new HEAD(store it in HEAD_REV)
iv) required ans is:- 'new HEAD' MID HEAD_REV
En espérant cet exemple suivant vous aidera à mieux comprendre l'algo
laissez-nos: - 23469 9 12367
So HEAD -> 23469 MID -> 9 TAIL --> 12367
step 2:- 23469 9 +1 = 23470 0
(now HEAD -> 23470 MID -> 0 HEAD_REV -> 07432 )
requis: -
Ans
23470 0 07432
Plz do infrom moi s'il existe une faille dans cette procédure
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)