Trouver la sum de tous les termes pairs dans la suite ne dépassant pas quatre millions

Chaque nouveau terme de la séquence de Fibonacci est généré en ajoutant les deux termes précédents. En commençant par 1 et 2, les 10 premiers termes seront:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … J’ai créé le programme mais ma réponse ne correspond pas.

#include int main() { long unsigned int i,sum=0,x=1,y=2,num; for(i=0;i<4000000;i++) { num=x+y; if(i%2==0) sum+=num; x=y; y=num; } printf("%lu\n",sum); getchar(); return 0; } 

Trois problèmes que je peux voir:

  • Vous devriez commencer par x = 1, y = 1 , sinon vous sautez le premier Fibonacci à valeur paire;
  • Votre condition de boucle doit être (x + y) <= 4000000
  • Vous devriez tester num pour l’équité, pas i .

(Après ces modifications, il devrait être évident que vous pouvez omettre complètement i , et donc remplacer la boucle for par une boucle while)

Dans votre code, vous trouvez la sum des nombres de fibonacci avec même index, pas même les nombres eux-mêmes + vous recherchez les 400 000 premiers numéros dans l’ordre, pas les nombres avec des valeurs <= 4000000. Votre code devrait ressembler à quelque chose comme

 while ( y < 4000000){ ... if (y %2 == 0) sum += y; } 

J’ai apporté un minimum de corrections et j’ai maintenant la bonne réponse. Vous pouvez en apprendre plus en lisant ceci (après tout, c’est le vôtre, pour commencer), mais pas en me lâchant dessus …

 #include  #define LIMIT (4 * 1000 * 1000) int main() { long unsigned int sum = 0, x = 1, y = 2, num; while (x <= LIMIT) { if ((x & 1) == 0 && x <= LIMIT) sum += x; num = x + y; x = y; y = num; } printf("%lu\n", sum); return 0; } 

Je pense que la ligne suivante

 if(i%2==0) 

pourrait plutôt être

 if( num % 2 == 0) 

Après reflection, je pense que vous n’avez pas réellement besoin de la variable i . Au lieu de cela, votre boucle peut être contrôlée par num comme:

 enum { LIMIT = 4 * 1000 * 1000 }; num = x + y; while( num <= LIMIT ) { 

print num à l’intérieur de la boucle, pour le débogage

  for(i=0;i<4000000;i++) { num=x+y; printf("num is %lu\n", num); /* DEBUGGING */ if(i%2==0) sum+=num; x=y; y=num; }