鱼C论坛

 找回密码
 立即注册
查看: 1209|回复: 14

[已解决]超级简单

[复制链接]
发表于 2020-11-21 20:56:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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 22:40:18
按你编写的程序,逻辑错误只有一处,先a=b;b=c才能c=a+b。你的那个先c=a+b,之后b=c时,b也被赋值成了a+b。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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, ...

评分

参与人数 1贡献 +1 收起 理由
昨非 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-21 22:40:18 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
按你编写的程序,逻辑错误只有一处,先a=b;b=c才能c=a+b。你的那个先c=a+b,之后b=c时,b也被赋值成了a+b。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-21 22:43:49 From FishC Mobile | 显示全部楼层
当然细节上和题目要求也不匹配,这个sum肯定应该被输出,而且最后要把第二项数字2加上,而且找出所有的斐波那契数是要分别打印吗?那还要在while循环体内对c进行输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 00:29:12 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-22 00:36 编辑
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         int a , b , c , sum            ;
  5.         for(sum = c = 0 , a = b = 1 ; c < 4000000 ; a = b , b = c) {
  6.                 c = a + b              ;
  7.                 if(! (c % 2)) sum += c ;
  8.         }
  9.         printf("%d\n" , c)             ;
  10. }
复制代码

        编译、运行实况
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. 4194432

  4. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,  ...

  1. #include<stdio.h>

  2. void main()
  3. {
  4.         int i = 0, sum = 1;
  5.         int f1 = 1;
  6.         int f2 = 1;

  7.         while (i < 20)
  8.         {
  9.                 f1 = f1 + f2;                            // 计算出下一个数,并存放于 f1 中
  10.                 f2 = f2 + f1;                            // 计算出下两个数,并存放于 f2 中
  11.                 if (f1 <= 4000000 && f2 <= 4000000)
  12.                 {
  13.                         sum += f2;
  14.                        
  15.                 }
  16.                 else
  17.                         break;
  18.                 i++;
  19.         }
  20.         printf("%d\n", sum);

  21. }
复制代码


**********************************************
sum = 3524577
Press any key to continue ...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 10:02:04 | 显示全部楼层

你要求的是偶数项和,不是前 N 项的和哟
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 10:24:41 | 显示全部楼层
风过无痕1989 发表于 2020-11-22 10:02
你要求的是偶数项和,不是前 N 项的和哟

但是标准答案就是4613732
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 10:33:14 | 显示全部楼层

我修改了一下程序,将斐波拉契数列全部列出,你可用手机或电脑上的计算器逐项验证计算,你说的 4613732 是不对的( 再说 4613732 超过了 4000000 )!

  1. #include<stdio.h>

  2. void main()
  3. {
  4.         int i = 0, sum1 = 1,sum2 = 1,sum = 0;
  5.         int f1 = 1;
  6.         int f2 = 1;

  7.         printf("%d %d ", f1, f2);                    // 输出数列前两个 1
  8.         while (i < 20)
  9.         {
  10.                 f1 = f1 + f2;                            // 计算出下一个数,并存放于 f1 中
  11.                 f2 = f2 + f1;                            // 计算出下两个数,并存放于 f2 中
  12.                 if (f1 <= 4000000 && f2 <= 4000000)
  13.                 {
  14.                         sum1 += f1;
  15.                         sum2 += f2;
  16.                         sum = sum1 + sum2;

  17.                 }
  18.                 else
  19.                         break;
  20.                 i++;
  21.                 printf("%d %d ", f1, f2);
  22.         }
  23.         printf("\n");
  24.         printf("\n");
  25.         printf("奇数项和为:%d \n", sum1);
  26.         printf("偶数项和为:%d \n", sum2);
  27.         printf("前 32 项总和为:%d \n", sum);
  28.         printf("\n");

  29. }
复制代码


****************************************
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
请按任意健继续 . . .
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬,你这个好像也没有问题。。。。。(我现在有点懵了)你看看我这输出啊
#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的偶数项和
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
昨非 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

你的程序是不是斐波拉契数列的算法,我没有去验证。现在也没有必要去验证了,你已经结帖了,说多了都是废话了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

。。。。。。

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
昨非 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-9 08:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表