Menu
Coddy logo textTech

196-algorithm

Lección 20 de 20 del curso Acertijos matemáticos de Coddy.

Si tomamos 38, invertimos y sumamos, 38 + 83 = 121, que es palíndromo.

No todos los números producen palíndromos tan rápido. Por ejemplo,

  1. 37 + 73 = 110
  2. 110 + 11 = 121

Es decir, el 37 tardó dos iteraciones en llegar a un palíndromo.

Otro ejemplo, empezando con 249:

  1. 249+942=1191
  2. 1191+1911=3102
  3. 3102+2013=5115.

Se asume que los números palíndromos como 11, 343, se convierten en palíndromos en cero iteraciones.

 

Tome cualquier número entero positivo, invierta los dígitos y súmelo al número original. Esta es la operación del proceso de invertir y sumar. Ahora repita el procedimiento con la suma obtenida hasta que se obtenga un número palíndromo. Este procedimiento produce rápidamente números palíndromos para la mayoría de los enteros.

 

Un número que nunca forma un palíndromo a través del proceso de invertir y sumar se llama número de Lychrel. Los primeros números que no se sabe si producen palíndromos, números "candidatos a Lychrel", son 196, 295, 394. [https://mathworld.wolfram.com/196-Algorithm.html]

challenge icon

Desafío

Intermedio

Aunque nadie lo ha demostrado todavía, algunos números en el sistema numérico de base 10, como 196, nunca producen un palíndromo. Para el propósito de este desafío, asumiremos que un número es de Lychrel hasta que se demuestre lo contrario. Cada número por debajo de diez mil, o bien (i) se convierte en un palíndromo en menos de cincuenta iteraciones, o (ii) nadie, con toda la potencia de cálculo existente, ha logrado hasta ahora mapearlo a un palíndromo.

Escribe una función isLychrel que reciba un entero positivo menor que 10000, y devuelva el número de iteraciones que tarda en convertirse en palíndromo.

devuelve -1 en caso de que pasen más de cincuenta iteraciones.

Pruébalo tú mismo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "solution.h"

int main() {
    int n;
    if (scanf("%d", &n) != 1) n = 0;
    int r = isLychrel(n);
    printf("%d\n", r);
    return 0;
}

Todas las lecciones de Acertijos matemáticos

7Least common multiple

IntroductionA problem

10Palindromes

Introduction196-algorithm