-1

问题:

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

我已经寻找了另一种方法来做到这一点,但我对为什么我的方法不起作用感到困惑。我已经在它下面包含了代码以及我编写的算法过程。无论我选择值 k 的哪个迭代跨度(4000000 或 10),我总是收到相同的答案:4200784。感谢您的帮助。

#include <stdio.h>

int main()
{
long int sum;
sum = 0;
long int i;
i = 1;
long int j;
j = 2;
long int k;

while(k<4000000)
{   
    k = i + j;
    if(k%2==0)
        sum +=k;
    i = j;
    j = k;
    
}
printf("%d",sum);
return 0;
}

//Step 0//For the initial conditions [i][j]=[1][2]
//Step 1//Find the value of i + j.
//Step 2//Find out if the solution is even by dividing by modulus 2.
//Step 3//If even, add the solution to the sum.
//Step 4//Replace the value of i with j, and replace the value of j with the new sum.
//Repeat Steps 1-4 while i + j < 4,000,000
//1, 2, 3, 5, 8, 13, 21, 34
4

2 回答 2

3

我相信你在寻找

sum += k;

不是

k+=sum;

您还应该解决此问题并将其放在您的 while 循环中

k = i + j;

注意:您还应该将 sum 初始化为 0

于 2013-03-16T23:32:26.573 回答
1

你永远不会初始化你的'k'变量。在第一个“while”测试中,“k”的值未定义,因此所有赌注都关闭了。

于 2013-03-17T00:19:57.723 回答