si se le da un número de 15 dígitos que cuál es la mejor manera de encontrar la siguiente palíndromo?

StackOverflow https://stackoverflow.com/questions/1516038

  •  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

¿Fue útil?

Solución

  • Dividir el número en tres partes, head, mid, tail

    1345673 2 9807541

  • head inversa y compararlo con tail  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 establecer mid := 0
  • resultado:. = head mid reverse(head)

    1345673 3 inversa (1345673) => 134567333765431

Otros consejos

Creo que es como esto

  1. Dividir el número en tres partes 1345673 2 9807541
  2. Voltear el último 1457089
  3. Si es mayor que la primera parte (que es en este caso)
    • firstpart ++
    • middlepart = 0
  4. 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:

  1. Dividir el número en la parte media de la cadena: siendo X la parte izquierda y siendo la parte derecha
  2. .
  3. Sea X'= {X + 1 si inversa (X)
  4. 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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top