严凯 发表于 2020-11-21 20:56:22

超级简单

#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多万,大佬们看看哪里错了。

严凯 发表于 2020-11-21 20:57:26

请编写程序,找出斐波那契数列中数值不超过 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, ...

倒戈卸甲 发表于 2020-11-21 22:40:18

按你编写的程序,逻辑错误只有一处,先a=b;b=c才能c=a+b。你的那个先c=a+b,之后b=c时,b也被赋值成了a+b。

倒戈卸甲 发表于 2020-11-21 22:43:49

当然细节上和题目要求也不匹配,这个sum肯定应该被输出,而且最后要把第二项数字2加上,而且找出所有的斐波那契数是要分别打印吗?那还要在while循环体内对c进行输出

jackz007 发表于 2020-11-22 00:29:12

本帖最后由 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:43:24

本帖最后由 风过无痕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 ...

严凯 发表于 2020-11-22 09:52:26

风过无痕1989 发表于 2020-11-22 02:43
不对! 从 1 和 2 开始,斐波那契数列的前 10 项应该是这样:1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...

...

答案是4613732

风过无痕1989 发表于 2020-11-22 10:02:04

严凯 发表于 2020-11-22 09:52
答案是4613732

你要求的是偶数项和,不是前 N 项的和哟

严凯 发表于 2020-11-22 10:03:13

倒戈卸甲 发表于 2020-11-21 22:40
按你编写的程序,逻辑错误只有一处,先a=b;b=c才能c=a+b。你的那个先c=a+b,之后b=c时,b也被赋值成了a+b。

嗯,但是我发现,我打印错了,她打印的sum,我打印的是c。。。{:10_285:}

严凯 发表于 2020-11-22 10:24:41

风过无痕1989 发表于 2020-11-22 10:02
你要求的是偶数项和,不是前 N 项的和哟

但是标准答案就是4613732

风过无痕1989 发表于 2020-11-22 10:33:14

严凯 发表于 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
请按任意健继续 . . .

严凯 发表于 2020-11-22 10:51:03

风过无痕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的偶数项和

严凯 发表于 2020-11-22 10:57:54

风过无痕1989 发表于 2020-11-22 10:33
我修改了一下程序,将斐波拉契数列全部列出,你可用手机或电脑上的计算器逐项验证计算,你说的 4613732...

我知道了,你这个最后还少了一项,就是1346269+2178309==3524578

风过无痕1989 发表于 2020-11-22 11:00:57

严凯 发表于 2020-11-22 10:51
大佬,你这个好像也没有问题。。。。。(我现在有点懵了)你看看我这输出啊
#include
int ma ...

斐波拉契的 f1 是奇数项,f2 是偶数项,我的程序用的就是 f2 累加和,在 f1、f2 有一项达到 4000000 时中断循环

你的程序是不是斐波拉契数列的算法,我没有去验证。现在也没有必要去验证了,你已经结帖了,说多了都是废话了

严凯 发表于 2020-11-22 11:06:37

风过无痕1989 发表于 2020-11-22 11:00
斐波拉契的 f1 是奇数项,f2 是偶数项,我的程序用的就是 f2 累加和,在 f1、f2 有一项达到 4000000 时中 ...

。。。。。。{:10_341:}
页: [1]
查看完整版本: 超级简单