gpt4 book ai didi

c - 这个算法有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:39 25 4
gpt4 key购买 nike

我正在尝试解决 Project Euler Problem #2:求斐波那契数列偶数项的总和,最大为 4,000,000。 例如:最大为 1000,总和为2+8+34+144+610 = 798。

现在,我的算法是从 2 开始每三个斐波那契数相加 - 因为每三个斐波那契数必然遵循以下逻辑:

偶数:E,奇数:O,

O+E=O    E+O=O    O+O=E
1+2=3 2+3=5 5+3=8 (example)

所以,我写了下面的代码来找出答案..

#include<stdio.h>
#define LT 4000000
int main()
{
double i0,i1,sum=0,cycle,eSum=2,status=1;
i0 = 1;
i1 = 2;

while(i1<LT && status == 1)
{
for(cycle=3;cycle>0;cycle--)
{
sum=i0+i1;
i0=i1;
i1=sum;

if((i1+i0)>LT)
{
status = 0;
break;
}
}
eSum+=(status == 1)?sum:0;
}
printf("\nThe required Answer: %8.0f\n",eSum);
return 0;
}

现在,LT = 1000 可以正常工作,但是对于需要 LT=4,000,000 的问题,程序显示错误值 1089154,而不是 4613732 的正确值。

我不知道这段代码有什么问题。另外,我不明白它如何在 LT=1000 时正常工作,但不能在更大的数字下正常工作。我是不是遗漏了一些非常明显的东西?请帮助..

最佳答案

OP 退出循环的时间过早。将测试更改为 sum 而不是 i1+i0 这是 next sum

    for(cycle=3;cycle>0;cycle--) {
sum=i0+i1;
i0=i1;
i1=sum;
// if((i1+i0)>LT)
if(sum>LT)
{
status = 0;
break;
}
}

由于您的数字在 [1 ... 2*4,000,000] 范围内,您将使用 longunsigned longfloat< 获得可接受的结果。由于这是一个整数问题,建议使用整数。

关于c - 这个算法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18794190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com