Почему не работает программа? С++

244
30 декабря 2021, 12:10

Требуется написать программу, которая находит натуральные числа, кратные 3 и 5 в диапазоне меньше 1000,затем выводит сумму этих чисел.Почему у меня не работает цикл?

#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "ru");
    int j=0;
    int sum=0;
    for (int i = 1000; i > j; j++)
    {
        if (j % 3)
        {
            sum + j;
        }
        if (j % 5)
        {
            sum + j;
        }
    }
    cout << "Вот сумма чисел кратных 3 или 5 в диапазоне меньше 1000"<<sum <<endl;
}
Answer 1

Что- то тут даже в принятом ответе фигня. И проверка начинается с 0, хотя 0 - не натуральное число.

Вот что от вас хотят:

unsigned int trivial(unsigned int N)
{
    unsigned int s = 0;
    for(unsigned int j = 1; j <= N; ++j)
        if (j%3 == 0 || j%5 == 0) s += j;
    return s;
}

А вот куда как более быстрое, а главное - математическое решение - просто просуммировать все числа, кратные трем - как арифметическую прогрессию, добавить такую же прогрессию для 5, и вычесть - для 15, чтоб учесть числа, кратные и 3, и 5 одновременно:

unsigned int sum_k(unsigned int n) { return n*(n+1)/2; }
unsigned int sum35(unsigned int N) { return 3*sum_k(N/3)+5*sum_k(N/5)-15*sum_k(N/15); }

Можете убедиться самостоятельно, что результат одинаков.

Answer 2

Вы не присваиваете результат вычислений в sum, а также ваше условие не совсем верно, так как в случае, если число кратно 5 и 3, то число просуммируется два раза.

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

Если вы даже исправите на sum += j, то ваша программа всеравно будет работать неправильно, так как значение j не меняется и, если число кратен и 3 и 5, то вы просуммируете его два раза. Поэтому нужно:

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

P.S. Этот код можно и оптимизировать, но к вопросу не касается...

Answer 4
int sum = 0;
for (int i = 3; i < 1000; ++i)
 if (!(i%3) || !(i%5))
  sum += i;

Тебе нужны КРАТНЫЕ 3 или 5, так что конструкция j%3 || j%5 не будет работать. Либо как выше в примере, либо i%3==0 || i%5==0.

READ ALSO
Выделить определенную часть строки в текстовом файле и найти 8-ми битную XOR сумму всех символов

Выделить определенную часть строки в текстовом файле и найти 8-ми битную XOR сумму всех символов

Недавно начала изучать с++, есть задание по обработке текстового файла такого вида:

77
откуда $_POST и $_GET в php читают входные данные?

откуда $_POST и $_GET в php читают входные данные?

Я пишу свой небольшй HTTP-сервер на с++В нем мне нужно обрабатывать динамические запросы

80
Ch++” or “ch+1” in C++?

Ch++” or “ch+1” in C++?

Почему cout думает что ch - это int ? А в случае ++ch нет

181
Проблема с инициализацией

Проблема с инициализацией

у меня проект состоит из 3-х файлов : Header - с прототипами ф-ций Source - с функциями Source1 - с выводом функций на экран Проблема в том, что я хочу написать...

219