找出序列中所有偶数值的总和,不超过四百万

时间:2010-10-03 00:01:38

标签: c fibonacci

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

1,2,3,5,8,13,21,34,55,89,...... 我制作了这个节目,但我的答案并不匹配。

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

5 个答案:

答案 0 :(得分:3)

我可以看到三个问题:

  • 你应该从x = 1, y = 1开始,否则你会跳过第一个偶数值的斐波那契;
  • 您的循环条件应为(x + y) <= 4000000
  • 您应该测试num的偶数,而不是i

(在这些更改之后,显然您可以完全省略i,因此将for循环替换为while循环)

答案 1 :(得分:1)

在您的代码中,您可以找到具有偶数索引的斐波那契数字的总和,而不是偶数数字本身+您按顺序搜索前4000000个数字,而不是具有值&lt; = 4000000的数字。您的代码应该类似于

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

答案 2 :(得分:0)

我做了一套最小的修正,现在得到了正确的答案。你可以通过阅读这个(毕竟,这是你的,开始)了解更多,而不是通过我对它进行漫游......

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

答案 3 :(得分:-1)

我认为以下一行

if(i%2==0)

可能改为

if( num % 2 == 0)

进一步思考,我认为你实际上并不需要变量i。相反,您的循环可以通过num控制:

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

答案 4 :(得分:-1)

在循环内打印num,用于调试

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