Найти сумму всех кратных 3 или 5 до 1000 - PullRequest
0 голосов
/ 29 июля 2011

Я занимаюсь проблемами в Project Euler в C ++, но не получаю правильных ответов на первый.

Вот мой код:

#include <iostream>

using namespace std;

int main()
{
    int b;
    int c;

    for (int a = 0; a <= 1000;)
    {
        a = a + 3;
        b = a + b;
    }
    cout << b << "\n";

    for (int a = 0; a <=1000;)
    {
        a = a + 5;
        c = a + c;
    }
    cout << c << "\n";

    b = b + c;
    cout << b << "\n";
    return 0;
}

Мой вывод:

167835
101505
269340

Где ошибка в моей логике?

Ответы [ 6 ]

6 голосов
/ 29 июля 2011

Вы добавляете все значения, которые кратны 3 и 5 (то есть кратны 15) дважды. Кроме того, вы также включите 1002 и 1005, что, вероятно, не предназначено.

2 голосов
/ 07 января 2017

Рассмотрим, найти сумму всех кратных 3 до 20?

Ans: =>

3, 6, 9, 12, 15, это кратно 3 до 20

Сумма всех кратных от 3 до 20 равна => [3 + 6 +9 + 12 + 15]

(3 + 6 +9 + 12 + 15), которые вы можете переписать вследующим образом

3 (1+ 2 + 3 + 4 + 5) => 3 (15) => 45

сумма последовательности может быть рассчитана по следующей формуле

K (K + 1) / 2 => здесь K равно 5 => 5 (5 + 1) / 2 => 15

В общем, мы можем сказать, что кратно любому числу (N) в данном диапазонеR

K = R / N;

N * (K (K + 1)) / 2

В нашем случае R = 20 и N = 3

int sumDivisibeBy(int R, int N)
{
   int K = R / N;
   int  SEQSUM =  ((K*(K + 1)) / 2));
   return (N*SEQSUM)
}

В вашем случае вам необходимо трижды вызвать эту функцию =>

sumDivisibeBy (1000,3) + sumDivisibeBy (1000,5) -sumDivisibeBy (1000,15)

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

Вы дважды учитываете числа, кратные 3 и 5 (то есть кратные 15).

0 голосов
/ 29 июля 2011

В то время как другие отправляли сообщения именно там, где вы допустили ошибку, вы должны попытаться выяснить, как вы получили неправильный ответ.

В вашем случае вы могли бы записать все значения, которые вы определили длябыть кратными 3 и 5;тогда вы могли бы проанализировать 333 кратных 3, которые вы должны были видеть, и 199 кратных 5, которые вы должны были видеть.

Я не хочу отдавать ключи для нахождения фактического решения (несмотря на то, чтотот факт, что другие уже сделали), но часть решения проблем в PE отладка.

0 голосов
/ 29 июля 2011

не будет увеличивать приращение на 3 и на 5, вы можете увеличить на 1 и проверить, делятся ли числа на 3 или на 5. Компьютеры предназначены для перемалывания чисел.

int sum = 0;
for (int i = 0; i < 1000; i++)
{
    if (i%3 == 0 || 
        i%5 == 0)
    {
        sum += i;
    }
}
cout << "SUM:" << sum << endl;
0 голосов
/ 29 июля 2011

Наряду с двойным числом, кратным 15, ваши приращения находятся в неправильном порядке.Если вы сначала увеличите a, у вас будут значения выше 1000. Также я не уверен насчет инициализации целых чисел в c ++, но, возможно, установлю их равными 0, по крайней мере, для читателей.

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