超级简单
#include<stdio.h>int main()
{
int a=1,b=2,c=3,sum=0;
while(c<=4000000)
{
if(c%2==0)
{
sum=sum+c;
}
c=a+b;
a=b;
b=c;
}
printf("%d",c);
return 0;
}
//我这个答案多了100多万,大佬们看看哪里错了。 请编写程序,找出斐波那契数列中数值不超过 4 百万的项,并计算这些项中值为偶数的项之和。s[F*q4oT5N
67eV0" #~PXc|qI-5jzK)>stkYw
斐波那契数列中,从第三项开始,每一项被定义为前两项的数字之和。]@Z!I[,)x
}wh>aoet'H=E86SKABy3q
从 1 和 2 开始,斐波那契数列的前 10 项应该是这样:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 按你编写的程序,逻辑错误只有一处,先a=b;b=c才能c=a+b。你的那个先c=a+b,之后b=c时,b也被赋值成了a+b。 当然细节上和题目要求也不匹配,这个sum肯定应该被输出,而且最后要把第二项数字2加上,而且找出所有的斐波那契数是要分别打印吗?那还要在while循环体内对c进行输出 本帖最后由 jackz007 于 2020-11-22 00:36 编辑
#include <stdio.h>
int main(void)
{
int a , b , c , sum ;
for(sum = c = 0 , a = b = 1 ; c < 4000000 ; a = b , b = c) {
c = a + b ;
if(! (c % 2)) sum += c ;
}
printf("%d\n" , c) ;
}
编译、运行实况
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
4194432
D:\00.Excise\C> 本帖最后由 风过无痕1989 于 2020-11-22 02:44 编辑
从 1 和 2 开始,斐波那契数列的从 1 和 2 开始,前 10 项应该是这样:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
不对! 从 1 和 2 开始,斐波那契数列的前 10 项应该是这样:1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...
#include<stdio.h>
void main()
{
int i = 0, sum = 1;
int f1 = 1;
int f2 = 1;
while (i < 20)
{
f1 = f1 + f2; // 计算出下一个数,并存放于 f1 中
f2 = f2 + f1; // 计算出下两个数,并存放于 f2 中
if (f1 <= 4000000 && f2 <= 4000000)
{
sum += f2;
}
else
break;
i++;
}
printf("%d\n", sum);
}
**********************************************
sum = 3524577
Press any key to continue ... 风过无痕1989 发表于 2020-11-22 02:43
不对! 从 1 和 2 开始,斐波那契数列的前 10 项应该是这样:1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...
...
答案是4613732 严凯 发表于 2020-11-22 09:52
答案是4613732
你要求的是偶数项和,不是前 N 项的和哟 倒戈卸甲 发表于 2020-11-21 22:40
按你编写的程序,逻辑错误只有一处,先a=b;b=c才能c=a+b。你的那个先c=a+b,之后b=c时,b也被赋值成了a+b。
嗯,但是我发现,我打印错了,她打印的sum,我打印的是c。。。{:10_285:} 风过无痕1989 发表于 2020-11-22 10:02
你要求的是偶数项和,不是前 N 项的和哟
但是标准答案就是4613732 严凯 发表于 2020-11-22 09:52
答案是4613732
我修改了一下程序,将斐波拉契数列全部列出,你可用手机或电脑上的计算器逐项验证计算,你说的 4613732 是不对的( 再说 4613732 超过了 4000000 )!
#include<stdio.h>
void main()
{
int i = 0, sum1 = 1,sum2 = 1,sum = 0;
int f1 = 1;
int f2 = 1;
printf("%d %d ", f1, f2); // 输出数列前两个 1
while (i < 20)
{
f1 = f1 + f2; // 计算出下一个数,并存放于 f1 中
f2 = f2 + f1; // 计算出下两个数,并存放于 f2 中
if (f1 <= 4000000 && f2 <= 4000000)
{
sum1 += f1;
sum2 += f2;
sum = sum1 + sum2;
}
else
break;
i++;
printf("%d %d ", f1, f2);
}
printf("\n");
printf("\n");
printf("奇数项和为:%d \n", sum1);
printf("偶数项和为:%d \n", sum2);
printf("前 32 项总和为:%d \n", sum);
printf("\n");
}
****************************************
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309
奇数项和为:2178309
用数项和为:3524577
前32项总和为:5702886
请按任意健继续 . . .
风过无痕1989 发表于 2020-11-22 10:33
我修改了一下程序,将斐波拉契数列全部列出,你可用手机或电脑上的计算器逐项验证计算,你说的 4613732...
大佬,你这个好像也没有问题。。。。。(我现在有点懵了{:10_247:})你看看我这输出啊
#include<stdio.h>
int main()
{
int a=1,b=2,c=0,sum=0;
while(c<4000000)
{
if(b%2==0)
{
sum=sum+b;
}
c=a+b;
a=b;
b=c;
}
printf("%d",sum);
return 0;
}
//我是要输出这个数列,前4000000的偶数项和 风过无痕1989 发表于 2020-11-22 10:33
我修改了一下程序,将斐波拉契数列全部列出,你可用手机或电脑上的计算器逐项验证计算,你说的 4613732...
我知道了,你这个最后还少了一项,就是1346269+2178309==3524578 严凯 发表于 2020-11-22 10:51
大佬,你这个好像也没有问题。。。。。(我现在有点懵了)你看看我这输出啊
#include
int ma ...
斐波拉契的 f1 是奇数项,f2 是偶数项,我的程序用的就是 f2 累加和,在 f1、f2 有一项达到 4000000 时中断循环
你的程序是不是斐波拉契数列的算法,我没有去验证。现在也没有必要去验证了,你已经结帖了,说多了都是废话了 风过无痕1989 发表于 2020-11-22 11:00
斐波拉契的 f1 是奇数项,f2 是偶数项,我的程序用的就是 f2 累加和,在 f1、f2 有一项达到 4000000 时中 ...
。。。。。。{:10_341:}
页:
[1]