сумма всех чисел ниже 1000, кратных 3 или 5 - PullRequest
0 голосов
/ 10 июля 2011

Задача проекта Эйлера 1 : Найти сумму всех кратных 3 или 5 ниже 1000

Вот моя программа, использующая две простые функции для вычисления суммы всех кратных 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 в качестве ответа. Это правильно, или я делаю что-то не так, как проверяет веб-сайт, что это неправильный ответ!

Ответы [ 6 ]

7 голосов
/ 10 июля 2011

Другой способ увидеть это:

ответ = (сумма, кратная 3) + (сумма, кратная 5) - (сумма, кратная 15)

это простые арифметические серии, поэтому вам даже не нужны циклы.

2 голосов
/ 10 июля 2011

Как указывало большинство других, вы складываете кратные 15 дважды.

Просто подсказка для другого решения:

Сумма, кратная 3 ниже 1000, равна

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 ...

2 голосов
/ 10 июля 2011

Вы суммируете все умножения на 15. Это простая математическая задача:

В случае 15, так как он делится на 3 и 5, вы рассчитываете его дважды в обоихиз функций.

Я предлагаю вам использовать один цикл и ||.Конечно, одна формула была бы лучше, но это просто математика, я сомневаюсь, что она вам понравится:)

Кстати, Project Euler - это больше математика / информатика, чем чистое программирование, поэтому, если сомневаетесь, попробуйтемыслить математикой:)

1 голос
/ 10 июля 2011

Посмотрите на принцип включения-исключения, который позволяет вам ответить на этот вопрос без использования цикла вообще!

1 голос
/ 10 июля 2011

Полагаю, вы дважды учитываете кратные 3 и 5.

1 голос
/ 10 июля 2011

В вашем решении не учитывается тот факт, что некоторые числа (например, 15) делятся на 5 и 3. Вы добавляете их дважды в сумму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...