Я еще не изучал циклы с использованием for, поэтому я решил эту проблему с помощью while, но я не могу найти проблему с моей проблемой, сумма должна быть 233168 , очевидно, и Я получаю 234168 . Я просто не могу определить, где я это пропустил.

Вопрос : Если мы перечислим все натуральные числа ниже 10, которые кратны 3 или 5, мы получим 3, 5, 6 и 9. Сумма этих кратных 23.

Найдите сумму всех кратных 3 или 5 меньше 1000.

package net.projecteuler;

public class Problem01 {
    public static void main(String[] args) {
        
        int n, sum;
        boolean notFinished = true;
        n = 0;
        sum = 0;
        
        
        while(notFinished) {
            if(n % 3 == 0 || n % 5 == 0) {
                sum = (sum + n);
            }
            n = (n + 1);
            if(n > 1000) {
                notFinished = !true;
            }
        }
        System.out.print("A soma dos números é " + sum);
    }
}
2
fabinfabinfabin 23 Сен 2021 в 18:02

2 ответа

Лучший ответ

Ваше состояние неправильное. Формулировка проблемы (выделено жирным шрифтом):

Найдите сумму всех кратных 3 или 5 меньше 1000 .

В то время как ваша программа также суммирует саму 1000, которая делится на 5. Если вы измените условие n > 1000 на n >= 1000, вы получите правильный ответ.

Боковое примечание: вам действительно стоит изучить петли for. Это было бы намного лучше для этой задачи.

1
Mureinik 23 Сен 2021 в 15:13

Ваше состояние неправильное. Цикл while выполняется слишком много раз, потому что вы сравниваете n > 1000 вместо n >= 1000.

С учетом сказанного вы также можете улучшить свой цикл. Логическая переменная не нужна, так как вы можете прямо проверить условие в операторе while, например: while (n < 1000).

Вдобавок, если вы собираетесь использовать свою логическую переменную, я бы, вероятно, установил ее на false, сказав isFinished = !true, а выполнив isFinished = false или isFinished = !isFinished.

1
alonkh2 23 Сен 2021 в 15:24