首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法完全解决Project Euler问题#2

无法完全解决Project Euler问题#2
EN

Stack Overflow用户
提问于 2009-11-30 14:38:06
回答 16查看 22.1K关注 0票数 9

我正在尝试通过一些Project Euler问题来学习C++的基础知识。我已经把它做成了to...#2。

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

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

求序列中所有不超过四百万的偶数项之和。

我的逻辑是:

代码语言:javascript
复制
0, 1, 1, 2, 3, 5
x  y  z
   x  y  z
      x  y  z
         x  y  z

上面的代码遍历了以下内容:

代码语言:javascript
复制
x + y = z
x = y
y = z

我的代码:

代码语言:javascript
复制
#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

我不知道出了什么问题。=/。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-11-30 14:43:33

您将y用作循环变量和序列中的第二项。

你想要做的是:

代码语言:javascript
复制
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

票数 19
EN

Stack Overflow用户

发布于 2009-11-30 14:49:36

为了提高速度,请注意序列是Even-Odd-Odd (重复)、Even-Odd-Odd (重复)。

你不需要测试每个数字来知道它是偶数还是奇数。每三个数字加一次即可。

票数 16
EN

Stack Overflow用户

发布于 2009-11-30 14:43:50

您没有将sum初始化为零。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1818186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档