2010-10-03 18 views
3

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:Trouver la somme de tous les termes pairs dans la séquence qui ne dépassent pas quatre millions

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... J'ai fait le programme mais ma réponse ne marche pas rencontre.

#include<stdio.h> 
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; 
} 
+0

Est-ce qu'il demande tous les nombres dans la séquence dont l'INDEX est pair, ou tous les nombres dans la séquence qui SONT pairs? – TaslemGuy

+2

"Valeur paire", pas "aux positions paires". – liori

+0

@TaslemGuy vous devriez écrire cela comme une réponse –

Répondre

3

Trois problèmes que je peux voir:

  • vous devriez commencer par x = 1, y = 1, sinon vous sautez le premier Fibonacci même à valeur;
  • Votre condition de boucle doit être (x + y) <= 4000000
  • Vous devez tester num même pour-ness, non i.

(Après ces changements, il devrait être évident que vous pouvez omettre i tout à fait, et donc remplacer la boucle for avec une boucle while)

+0

pourquoi (x + y) <= 4000000 et non num <= 4000000? –

+1

et pourquoi partir de x = 1 et y = 1? SI la question dit que la série est 1,2,3,5 ... –

+0

@fahad: Parce que le test est exécuté * avant * l'exécution de la boucle, donc cela arrive avant "num" est calculé. Et si vous commencez par 'x = 1, y = 1' alors le premier nombre testé est 3, pas 2. – caf

1

Dans votre code vous trouvez la somme des nombres de fibonacci avec l'index même, eux-mêmes + vous recherchez nombres même pas les premiers 4000000 nombres dans l'ordre, et non pas les nombres avec des valeurs < = 4000000 Votre code doit être quelque chose comme

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

Je pense que la ligne suivante

if(i%2==0) 

pourrait à la place être

if(num % 2 == 0) 

En pensant plus loin, je pense 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) { 
+0

Hmm .. Une raison pour le vote à la baisse? Si la réponse est incorrecte, veuillez commenter, afin que je puisse apprendre mon erreur. – Arun

0

J'ai fait un ensemble minimal de corrections et maintenant obtenir la bonne réponse. Vous pouvez en savoir plus en lisant ce (après tout, il était le vôtre, pour commencer) que par moi radoter à son sujet ...

#include <stdio.h> 

#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; 
} 
-1

impression num 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; 
}