鱼C论坛

 找回密码
 立即注册
查看: 1606|回复: 2

[已解决]帮忙看下一个小细节

[复制链接]
发表于 2018-9-15 10:34:23 | 显示全部楼层 |阅读模式
20鱼币
带你学C带你飞第一阶段考核里有个题目,找出斐波那契数列中数值不超过 4 百万的项,并计算这些项中值为偶数的项之和。标准答案是这样。
#include <stdio.h>

int main()
{
        long a = 1, b = 2, c, sum = 0;

        do
        {
                if (!(b % 2))
                {
                        sum += b;
                }
                c = a + b;
                a = b;
                b = c;
        } while (c < 4000000);

        printf("%ld\n", sum);

        return 0;
}                                                          运行结果为4613732

但是我把c去掉,把代码改成:
#include <stdio.h>

int main()
{
        long a = 1, b = 2,  sum = 0;

        do
        {
                if (!(b % 2))
                {
                        sum += b;
                }
               
                a = b;
                b = a+b;
        } while (a+b< 4000000);

        printf("%ld\n", sum);

        return 0;
}                                                      运行结果变成了4194302.   这是咋回事?
最佳答案
2018-9-15 10:34:24
本帖最后由 jackz007 于 2018-9-15 14:01 编辑

    楼主的程序问题出在以下语句:

    a = b        ;
    b = a + b  ;

    变量 a 在这里完全失去了独立性,成为 b 的映射,根本就没必要存在,上述 2 条语句完全可以用下面的 1 条语句等效:

    b = b * 2  ;

    按定义, “斐波那契数列” 是从 1 ,2 开始,后面的项是前两项之和:1 ,2 ,3 ,5 ,8 ,13 ,21 ......(标准答案代码中的变量 c)

    而按楼主程序的表述则是从 2 开始,后面的项是前一项的两倍:2 ,4 ,8 ,16 ,32 ,64 ...... (楼主代码中的 a + b)

    “斐波那契数列”不正确,这就是楼主的问题之所在,所以,标准答案代码中的变量 c 是万万不可省略的。

最佳答案

查看完整内容

楼主的程序问题出在以下语句: a = b ; b = a + b ; 变量 a 在这里完全失去了独立性,成为 b 的映射,根本就没必要存在,上述 2 条语句完全可以用下面的 1 条语句等效: b = b * 2 ; 按定义, “斐波那契数列” 是从 1 ,2 开始,后面的项是前两项之和:1 ,2 ,3 ,5 ,8 ,13 ,21 ......(标准答案代码中的变量 c) 而按楼主程序的表述则是从 2 开始,后面的项是前一项的 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-15 10:34:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2018-9-15 14:01 编辑

    楼主的程序问题出在以下语句:

    a = b        ;
    b = a + b  ;

    变量 a 在这里完全失去了独立性,成为 b 的映射,根本就没必要存在,上述 2 条语句完全可以用下面的 1 条语句等效:

    b = b * 2  ;

    按定义, “斐波那契数列” 是从 1 ,2 开始,后面的项是前两项之和:1 ,2 ,3 ,5 ,8 ,13 ,21 ......(标准答案代码中的变量 c)

    而按楼主程序的表述则是从 2 开始,后面的项是前一项的两倍:2 ,4 ,8 ,16 ,32 ,64 ...... (楼主代码中的 a + b)

    “斐波那契数列”不正确,这就是楼主的问题之所在,所以,标准答案代码中的变量 c 是万万不可省略的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-15 14:13:10 | 显示全部楼层
jackz007 发表于 2018-9-15 10:34
楼主的程序问题出在以下语句:

    a = b        ;

哇塞,感谢大佬的细心指导。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 09:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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