Почему диапазон внутреннего цикла влияет на решение этой проблемы? - PullRequest
0 голосов
/ 06 июня 2019

Напишите статический метод printNumbers, который принимает целое число max в качестве аргумента и печатает все совершенные числа, которые меньше или равны max.

Сначала я продолжалполучить неправильный ответ, потому что внутренний цикл был установлен на j i % j != 0, даже если диапазон j будет больше?

for (int i = 1; i <= max; i++) {   
    int sum = 0;

    for (int j = 1; j < i; j++) {
        if (i % j == 0) {
            sum += j;
        }
    }
    if (sum == i) {
        System.out.print(sum + " ");
    }
}

Если я изменил внутренний цикл j < max, то printNumbers(6) дает и 1, и 6, но printNumbers(500) дает только 1 и никакого другого числа.

1 Ответ

1 голос
/ 06 июня 2019

Если вы установите j < max во внутреннем цикле, то когда j = i, i % j == 0 вернет true и искажает ваш результат.Это хороший пример математической ошибки, на которую следует обратить внимание при кодировании.

...