小于1000的所有是3或5的倍数的数的和

sum of all the numbers below 1000 that are multiples of 3 or 5

本文关键字:1000 小于      更新时间:2023-10-16

Project Euler problem 1是:求小于1000的所有3或5的倍数的和

下面是我的程序,使用两个简单的函数计算出3的所有倍数和5的所有倍数的和,然后将它们相加:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;

int threeSum( void );
int fiveSum( void );

int main( int argc, char** argv )
{
    cout << "n The sum of all the natural numbers below 1000 that are multiples of 3 or 5 = n" << endl;
    cout << threeSum() + fiveSum() << endl << endl;
    system( "PAUSE" );
}

int threeSum( void )
{
    int sumSoFar = 0;
    for ( int i = 1 ; i < 1000 ; i++ )
    {
        if ( i % 3 == 0 )
                            sumSoFar = sumSoFar + i;
    }
    return sumSoFar;
}

int fiveSum( void )
{
    int sumSoFar = 0;
    for ( int i = 1 ; i < 1000 ; i++ )
    {
        if ( i % 5 == 0 )
                            sumSoFar = sumSoFar + i;
    }
    return sumSoFar;
}

产生266333作为答案。这是正确的,还是我做错了什么,因为网站检查器说这是错误的答案!

另一种理解方式是:

答案=(3的倍数和)+(5的倍数和)-(15的倍数和)

这些是简单的等差级数,所以你甚至不需要循环

你要把15的所有倍数加起来。这是一个简单的数学问题:

在15的情况下,由于它可以被3和5整除,因此在两个函数中都要计数两次。

我建议您可以使用一个单回路和||。当然,一个公式会更好,但那只是数学,我怀疑你会喜欢它:)

顺便说一句,欧拉项目更多的是数学/计算机科学,而不是纯粹的编程,所以当你有疑问的时候,试着用数学的方式思考:)

正如大多数人指出的那样,你把15的倍数加了两次。

提示另一个解决方案:

小于1000的3的倍数之和为

SUMBELOW(3,1000) = 3 + 6 + 9 + ... + 999 = 3*(1+2+3+...+333) = 3*333*(1+333)/2 = 3*((1000-1)/3)*(1+(1000-1)/3)/2

(所有的除法都是整数除法…)

对于计算5和15的倍数的和也有类似的公式。要得到总的结果,你必须把3和5的和相加,然后减去15的和…

您的解决方案没有考虑到某些数字(如15)可以被5和3整除的事实。你把它们加了两次。

我猜你是重复计算了3 5的倍数

这是最好的答案,也是我能做的最简单的:

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