Решение: Максимальное значение переменной
Определите, при каком наибольшем введённом значении переменной $s$ программа выведет число 4. Для Вашего удобства программа представлена на четырёх языках программирования.
1s = int(input()) 2s = (s - 21) // 10 3n = 1 4while s >= 0: 5 n = n * 2 6 s = s - n 7print(n)
Решение по шагам
5 шаговПосле выполнения первого присваивания обозначим значение переменной $s$ через $t$:
$$t = \left\lfloor \dfrac{s - 21}{10} \right\rfloor$$Изначально $n = 1$. При первой итерации цикла $n$ принимает значение 2, а при второй — значение 4.
Чтобы цикл выполнился ровно два раза, перед первой итерацией должно быть $t \geq 2$, а после вычитания 2 и 4 должно стать отрицательное значение: $t - 2 - 4 < 0$. Следовательно, $2 \leq t < 6$.
Максимальное подходящее целое значение $t$ равно 5. Тогда:
$$\left\lfloor \dfrac{s - 21}{10} \right\rfloor = 5$$Из условия $5 \leq (s - 21)/10 < 6$ получаем $71 \leq s < 81$. Наибольшее целое значение $s$ равно 80.
Где здесь ошибаются
Забывают, что значение $n$ изменяется до проверки следующей итерации.
Берут границу $s = 81$, при которой цикл выполняется ещё один раз и программа выводит 8.
Неверно учитывают целочисленное деление при вычислении первого значения $s$.