coura 发表于 2021-10-7 17:28:46

第一阶段考核第1题我两种解法,算得不同,相差32,求指示

本帖最后由 coura 于 2021-10-7 18:13 编辑

#include <stdio.h>

int main()
{
        long long a, b, c, sum = 0;
       
        for(a=1,b=2; c <= 4000000; c = a + b, a = b, b = c)
        {
                if(b % 2 == 0)
                {
                        sum += b;
                }
        }
       
        printf("%lld", sum);
}
这段算出的是正确答案!

#include <stdio.h>

int main()
{
        long long a, b, c, sum = 2;
       
        for(a=1,b=2; c <= 4000000; c = a + b, a = b, b = c)
        {
                if(c % 2 == 0)
                {
                        sum += c;
                }
        }
       
        printf("%lld", sum);
}
而这段是我把b换成c,并且将sum的初始值定为2,因为c是第三项开始的,我就把b的值先加了,但是算出的答案多了32,百思不得其解,求求了。

大马强 发表于 2021-10-7 17:45:29

你一个是加b,另一个是加c,当然会与预期不一样
同为加b,结果多2

coura 发表于 2021-10-7 18:12:46

大马强 发表于 2021-10-7 17:45
你一个是加b,另一个是加c,当然会与预期不一样
同为加b,结果多2

可是sum值不一样,加c的sum的初始值为2,加b的初始值为0{:10_324:},而且结果相差为32{:10_266:}

大马强 发表于 2021-10-7 19:41:32

c和b又不相等

大马强 发表于 2021-10-7 19:42:16

你要控制同一变量呀

coura 发表于 2021-10-7 20:03:20

大马强 发表于 2021-10-7 19:42
你要控制同一变量呀

#include <stdio.h>

int main()
{
        long long a, b, c, sum = 2;
       
        for(a=1,b=2,c=3; c <= 4000000; c = a + b, a = b, b = c)
        {
                if(!(c%2))
                {
                        sum += c;
                }
        }
       
        printf("%lld", sum);
}
第二段代码我改了一下,在for循环的初始值中添加了c=3,然后就和第一段答案相同了。
可能是因为for循环,在初始值中没有c的值,所以第一次循环不知道加成了什么,哈哈哈。
不过还是谢谢您的讲解{:10_279:}
页: [1]
查看完整版本: 第一阶段考核第1题我两种解法,算得不同,相差32,求指示