Yo soy la solución Actualmente, Project Euler problem 14:Proyecto Euler # 14
La siguiente secuencia iterativa se define para el conjunto de enteros positivos:
n → n/2 (n is even) n → 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Which starting number, under one million, produces the longest chain?
que ideó el siguiente algoritmo para resolver el problema:
- En lugar de encontrar series para ea ch número por separado, que contendrá muchos cálculos redundantes, intento desarrollar la serie hacia atrás desde 1. Es decir, empiezo desde el número y predigo el elemento anterior.
- Dado que se pueden generar series múltiples, almacene el número reciente de todas las series usando una lista vinculada. (La idea es almacenar solo aquellos elementos que tienen series más largas.)
- Haré un ciclo de esto, hasta que encuentre todos los números debajo del límite dado; el último número debajo del límite tendrá la serie más larga.
Aquí está mi código:
void series_generate(long num)
{
long n = 1;
addhead(n); //add 1 to list.
while (n < num)
{
series *p;
for (p = head; p != NULL; p = p->next)
{
long bf = p->num - 1;
if (p->num%2 == 0 && bf != 0 && bf%3 == 0) {
bf /= 3;
if (bf != 1)
addhead(bf);
if (bf < num)
n++;
}
p->num *= 2;
if (p->num < num)
n++;
}
}
}
Here is the link to complete code. Sin embargo, no recibo las respuestas como lo esperaba. ¿Alguien puede explicar por qué este algoritmo no funcionará?
¿Qué devuelve su algoritmo y cómo difiere de sus expectativas? – gary
Debe usar el depurador para recorrer su programa línea por línea, para encontrar la primera línea cuyo comportamiento difiere de lo que pretendía. –
calculé la respuesta al problema usando la fuerza bruta. Espero 837799 – mohit