si se le da un número de 15 dígitos que cuál es la mejor manera de encontrar la siguiente palíndromo?
-
19-09-2019 - |
Pregunta
en C ++ lo que será la lógica más rápida de encontrar el próximo palíndromo de un determinado número de 15 dígitos? por ejemplo, cuál será la próxima palíndromo de: 134567329807541
Solución
-
Dividir el número en tres partes,
head
,mid
,tail
1345673 2 9807541
-
head
inversa y compararlo contail
3765431 -
Si
reverse(head) <= tail
(si son iguales la entrada inicial es un palíndromo, y desea que el siguiente)- Si
mid < 9
, incrementar mediados - Else parte
head
incremento y establecermid := 0
- Si
-
resultado:. =
head mid reverse(head)
1345673 3 inversa (1345673) => 134567333765431
Otros consejos
Creo que es como esto
- Dividir el número en tres partes 1345673 2 9807541
- Voltear el último 1457089
- Si es mayor que la primera parte (que es en este caso)
- firstpart ++
- middlepart = 0
- voltear primera parte y reemplazar última parte.
No estoy a punto de poner en práctica cualquier cosa, pero me imagino que la lógica sería:
- Dividir el número en la parte media de la cadena: siendo X la parte izquierda y siendo la parte derecha .
- Sea X'= {X + 1 si inversa (X)
- El resultado es entonces concat (X 'inversa (X'));
Si la longitud es desigual, tiene que tratar el dígito medio separado. Pero eso es bastante trivial.
Creo que el siguiente algo también debería funcionar .. Es también más fácil de implementar
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
Con la esperanza de que el ejemplo siguiente ayudará a comprender mejor el algo
dejar que nos ser: - 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 )
Ans requeridas: -
23 470 0 07 432
PLZ me infrom si existe alguna falla en este procedimiento
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)