第一阶段考核第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,百思不得其解,求求了。 你一个是加b,另一个是加c,当然会与预期不一样
同为加b,结果多2 大马强 发表于 2021-10-7 17:45
你一个是加b,另一个是加c,当然会与预期不一样
同为加b,结果多2
可是sum值不一样,加c的sum的初始值为2,加b的初始值为0{:10_324:},而且结果相差为32{:10_266:}
c和b又不相等 你要控制同一变量呀
大马强 发表于 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]