2009-09-06 6 views
0

Chaque nouveau terme dans la suite de Fibonacci est générée en ajoutant les deux termes précédents. En commençant avec une et 2, les 10 premiers termes sont les suivants:projet Euler N2 - algorithme Fibonacci isnt fonctionne correctement

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Trouver la somme de tous les termes de même valeur qui ne sont pas dépassent quatre millions.

 Int64[] Numeros = new Int64[4000005]; 
     Numeros[0] = 1; 
     Numeros[1] = 2; 

     Int64 Indice = 2; 
     Int64 Acumulador = 2; 

     for (int i = 0; i < 4000000; i++) 
     { 
      Numeros[Indice] = Numeros[Indice - 2] + Numeros[Indice - 1]; 

      if (Numeros[Indice] % 2 == 0) 
      { 
       if ((Numeros[Indice] + Acumulador) > 4000000) 
       { 
        break; 
       } 
       else 
       { 
        Acumulador += Numeros[Indice]; 
       } 
      } 

      Indice++; 
     } 

     Console.WriteLine(Acumulador); 
     Console.ReadLine(); 

Mon programme ne fonctionne pas comme il devrait être, je suppose que le projet Euler disent-ils ma réponse est incorrecte. Peut-être que je néglige quelque chose. De l'aide?

+5

Pour commencer, il suffit de suivre les deux derniers chiffres. –

+0

Faites d'abord un contrôle sur la limite supérieure avant de vérifier si le nombre est pair. –

Répondre

2

Cette ligne

if ((Numeros[Indice] + Acumulador) > 4000000) 

est la vérification de la somme étant supérieure à 4 mm. Vous devez vérifier que le terme (Numeros [Indice]) est supérieur à 4MM. Donc changer cela à cela ...

if (Numeros[Indice] > 4000000) 

est probablement un bon point de départ.

0

Et l'homme aussi votre condition de test en boucle est inutile .. i wil jamais atteindre la valeur de 4000000 simplement une

while(1){ 
//code 
} 

fera aussi, pas besoin de i comme u ne l'utilise jamais

Questions connexes