Почему x равно 5050?

#java

#java

Вопрос:

 for(i = 1;i <= 100;i  )
    for(j = i; j <= 100; j  )
        x  ;
System.out.println(x);
  

Сначала я думал, что результат будет 10.000, но это было 5050. Почему? Что меняет i?

Комментарии:

1. Я предполагаю x , что целое число инициализировано значением 0? Вы должны включить все детали, относящиеся к вопросу, в свой пост.

Ответ №1:

Ответ 5050 правильный, учитывая предположение, что x оно равно 0 (как это представляется на основе ваших результатов). Причина, по которой оно не равно 10 000, заключается в строке j = i вместо, например j = 1 , что делает его 100 99 98 … 1 = 5050.

Комментарии:

1. Предполагается x , что он был инициализирован равным 0. OP даже не заявил об этом. Не говорю, что это плохой ответ, но я думаю, что это стоит упомянуть в качестве предварительного условия.

2. @CharlieArmstrong должен был бы принять 0 во время выполнения кода, а результат, полученный операцией, был 5050, x = 0 — единственное число, которое сделало бы это верным для данного кода

3. Конечно, это справедливое замечание. Если бы это был я, я бы все равно поставил что-то в начале, например, «Предполагая x , что инициализировано 0, ответ 5050 правильный», просто чтобы быть как можно более понятным. Просто предложение, не более того.

Ответ №2:

Сначала i is 1 , so j переходит от 1 к 100, а внутренний цикл выполняет 100 итераций, что означает x увеличение в 100 раз.

В следующий раз i становится 2 , так j что переходит от 2 к 100. Это означает 99 итераций и x увеличивается в 99 раз и так далее и тому подобное…

Это сумма всех чисел от 100 до 1, которая равна (100 * (100 1)) / 2 == 5050

Ответ №3:

Внутренний цикл выполняется (100 - i) times на каждой итерации внешнего цикла. т.Е. Когда значение i = 0 во внешнем цикле, выполняется внутренний цикл 100 times , когда значение i = 1 во внешнем цикле, выполняется внутренний цикл 99 times и так далее и тому подобное. При добавлении всех этих значений 100 99 98 ... 1 = 5050