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:
x = 1, y = 1
, sinon vous sautez le premier Fibonacci à valeur paire; (x + y) <= 4000000
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; }