我正在尝试通过一些Project Euler问题来学习C++的基础知识。我已经把它做成了to...#2。
斐波那契序列中的每个新项都是通过将前两个项相加而生成的。从1和2开始,前10个术语将是:
1,2,3,5,8,13,21,34,55,89,...
求序列中所有不超过四百万的偶数项之和。
我的逻辑是:
0, 1, 1, 2, 3, 5
x y z
x y z
x y z
x y z
上面的代码遍历了以下内容:
x + y = z
x = y
y = z
我的代码:
#include <iostream.h>
using namespace std;
int main()
{
int x = 0;
int y = 1;
int z;
int sum;
for(y = 1; y <= 4000000; y++) {
z = x + y;
x = y;
y = z;
if(y % 2 == 0) {
sum += y;
}
}
cout << sum;
cin.get();
}
输出的正确答案是4613732
。
我不知道出了什么问题。=/。
发布于 2009-11-30 14:43:33
您将y
用作循环变量和序列中的第二项。
你想要做的是:
int x = 0;
int y = 1;
int z;
int sum = 0;
do {
z = x + y;
x = y;
y = z;
if (y % 2 == 0) sum += y;
} while (y <= 4000000);
请注意,您可能还应该初始化sum
。
发布于 2009-11-30 14:49:36
为了提高速度,请注意序列是Even-Odd-Odd (重复)、Even-Odd-Odd (重复)。
你不需要测试每个数字来知道它是偶数还是奇数。每三个数字加一次即可。
发布于 2009-11-30 14:43:50
您没有将sum初始化为零。
https://stackoverflow.com/questions/1818186
复制相似问题