¿Qué es un algoritmo eficiente para encontrar un número mágico?

¿Qué es un número mágico?

  • Encuentre la suma de dígitos del número dado. (1 + 7 + 2 + 9 => 19)
  • Reverso de la salida de suma de dígitos. El reverso de 19 es 91
  • Encuentre el producto de la suma de dígitos y el reverso de la suma de dígitos. (19 X 91 = 1729)
  • Si el valor del producto y la entrada dada son iguales, entonces el número dado es un número mágico. (19 X 91 1729)
  • Entonces, 1729 es un número mágico
  • programa: ->
  • #include
  • int sumOfDigits (int num) {

int suma = 0;

while (num> 0) {

suma = suma + (num% 10);

num = num / 10;

}

suma de retorno;

}

int reverse (int num) {

int rev = 0;

while (num> 0) {

rev = (rev * 10) + (num% 10);

num = num / 10;

}

volver rev;

}

int main () {

int num, sum, rev;

/ * obtener el valor de entrada del usuario * /

printf (“Ingrese el valor para num:”);

scanf (“% d”, & num);

/ * encontrar suma de dígitos * /

sum = sumOfDigits (num);

/ *

* si el valor es de un solo dígito, entonces

* el valor y su reverso son iguales

* /

si (suma <10) {

if ((sum * sum) == num) {

printf (“% d es un número mágico \ n”, num);

} más {

printf (“% d no es un número mágico \ n”, num);

}

devuelve 0;

}

/ * reverso del número dado * /

rev = reverso (suma);

/ * imprimir las salidas * /

if ((sum * rev) == num) {

printf (“% d es un número mágico \ n”, num);

} más {

printf (“% d no es un número mágico \ n”, num);

}

devuelve 0;

}

Un número mágico es una figura considerada de importancia en un contexto particular. Se puede definir de muchas maneras diferentes, cada una con propiedades distintas. Para obtener más información, consulte Número mágico: Wikipedia. Solo en la comunidad de Ciencias de la Computación, hay muchos usos del término dado, y por lo tanto, usarlo es un poco ambiguo a menos que se defina adecuadamente.

Recientemente, resolví un problema de programación para mi amigo que lo enfrentó en un festival de tecnología. Contestaré esta pregunta de acuerdo con esa definición de un número mágico. El problema de programación era : compruebe si un número dado es un número mágico en complejidad O (1) (un número mágico es aquel cuya suma de dígitos da como resultado 1) . Ejemplos de algunos números mágicos son: 1, 10, 19, 37, 100, 7588 y así sucesivamente.

Una solución de una línea en C sería:

(número% 9 == 1)? printf (“¡El número ingresado es un número mágico!”): printf (“El número no es mágico”);

Resolviendo la solución –

Primero, comprenda que usar un bucle para agregar los dígitos individuales del número no funcionará, ya que resulta en una complejidad O (n).

A continuación, ¿recuerda cómo funciona la prueba de divisibilidad para 3 o 9?

Sumamos los dígitos y verificamos si es divisible por 3. En caso afirmativo, entonces, el número original también es divisible por 3. Una explicación de por qué funciona se da usando aritmética modular y se proporciona aquí: http: // mathforum. org / k12 / mathtip

Volviendo a la solución, observamos que para que exista un número mágico, la suma de sus dígitos debe resultar de manera recursiva en 10 (o, más apropiadamente, 1).

Ahora, siguiendo las líneas de prueba de divisibilidad para 3 o, 9, observamos que la suma de dígitos de un número es 10 (o, 1) si el número cuando se divide por 9, deja un resto de 1. Entonces, en esencia , un número mágico como se definió anteriormente, tiene la forma 9n + 1, donde n es un número entero.

Ahora, si desea encontrar todos los números mágicos dentro de un intervalo específico, determine el rango de valores permitidos que n puede asumir usando las dos inecuaciones 9n + 1 [matemáticas] \ geq [/ matemáticas] rango_inferior, y 9n + 1 [matemáticas] \ leq [/ math] rango_ superior. Usando un bucle, genere un número mágico para cada valor que n toma y está listo para comenzar.

More Interesting

¿Cuál es la complejidad temporal de resolver de manera recursiva el problema del salto de palabra?

¿Cuán específicamente la memoria de la clase de almacenamiento cambiará las arquitecturas, los ecosistemas (incluidas las opciones de lenguaje de programación) y los algoritmos para big data?

¿En qué se diferencia un árbol de búsqueda binario de un árbol binario?

¿Cuáles son los problemas de programación que resolvió que le hicieron decir "¡Guau! ¡Lógica asombrosa"?

Cómo calcular coeficientes binomiales para números muy grandes

Cómo aprender qué algoritmo usar en un conjunto de problemas en particular

¿Se utiliza una estructura de datos de pila para algoritmos multirecursionales?

¿Cómo funciona la función recursiva a continuación?

Cómo aplicar mi enfoque para resolver el problema antes de abrir la solución

¿Cuál es la diferencia entre el orden de fusión de arriba hacia abajo y el de fusión de abajo hacia arriba?

¿Cuál es el algoritmo predeterminado utilizado para buscar en MapReduce?

¿Cómo funcionan los mecanismos del filtro de revisión de Yelp?

¿Qué idioma es mejor para comprender la importancia de las estructuras de datos?

¿El uso de algoritmos en una clave de contraseña típica de 256 bits que siempre está cambiando pero que aún se muestra al usuario (como en un teléfono, por ejemplo) para crear código requeriría supercomputadoras más rápidas disponibles para superarlo?

Cómo aprender la estructura de datos en 1 mes en el albergue