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