0

好的,所以我是一个完整的菜鸟。我正在尝试在 Project Euler 中提高 C++ 水平。我正在做问题 #1,但我没有得到正确的输出。当我运行它时,我得到 numTotalThree 是 -3,numTotalFive 是 -5,而 numTotal 是 0。我的函数有问题,但我不确定我做错了什么。我该如何解决?

#include <iostream>
using namespace std;

int main()
{
    int amount = 1000;
    int numOfThree = amount / 3;
    int numOfFive = amount / 5;
    int numTotalThree = 0;
    int numTotalFive = 0;
    int numTotal = numTotalThree + numTotalFive;

    cout << numOfThree << endl;
    cout << numOfFive << endl;

    for(int i = 0; i <= numOfThree; i++)
    {
        numTotalThree += numTotalThree + 3;
    }

    cout << numTotalThree << endl;

    for(int i = 0; i <= numOfFive; i++)
    {
        numTotalFive += numTotalFive + 5;
    }

    cout << numTotalFive << endl;

    cout << numTotal << endl;

    system("PAUSE");
    return 0;
}
4

4 回答 4

3

我想你需要这样的东西:

int sum = 0;

for (int i =0; i < 1000; ++i){
    if(i % 3 == 0 || i % 5 == 0){
        sum += i;
    }
}

稍后编辑:我不知道你为什么要计算小于 1000 的可被 3 或 5 整除的数字。问题(Project Euler - Problem 1)要求所有小于 1000 的数字的总和,可被 3 整除或 5。

于 2013-10-20T19:56:50.420 回答
0

C++ 不是函数式语言,它是程序性的——这意味着你必须按顺序做事。当你这样做时:

int numTotalFive = 0;
int numTotal = numTotalThree + numTotalFive;

当 numTotalThree 和 numTotalFive 被更新时,它将在那里执行而不是再次执行。如果您不再触摸它,那将是输出的值。

于 2013-10-20T19:50:14.773 回答
0

这是一个继续的想法:

通过检查余数 %==0 来检查有多少可以被 3 整除。对五个做同样的事情,然后对他们两个做同样的事情。从前两个的总和中减去可以被两者整除的数字以获得准确的答案。

int divisibleByThree=0; 
int divisibleByFive=0;
int divisibleByBoth=0;
int total;

for(int i=0; i<1000; i++)
{
    if (i%3==0)
        divisibleByThree++;
    if (i%5==0)
        divisibleByFive++;
    if (i%5==0) && i%5==0)
        divisibleByBoth++;
}

    total = divisibleByThree + divisibleByFive - divisibleByBoth;
    return total;
于 2013-10-20T19:52:47.727 回答
0

您的

numTotalThreen在 [0, 333]中溢出

  • 3/2*(-2 + 2 n )

在 [0, 200]numTotalFive中类似n

  • 5/2*(-2 + 2 n )

所以你看到的是负值。

正如其他人建议的那样,您可能需要重新审视您的逻辑。

您只需将 [0,1000] 中可被 3 或 5 整除的数字相加

size_t total =0;
for (size_t x =0; x < 1000; x++){
    if( (x % 3 == 0) || (x % 5 == 0) ){
        total += x;
    }
}
于 2013-10-20T19:59:16.347 回答