Решение: Максимальное значение переменной
Определите, при каком наибольшем введённом значении переменной s программа выведет число 32. Для Вашего удобства программа представлена на четырёх языках программирования.
1s = int(input()) 2s = (s - 21) // 10 3n = 1 4while s >= 0: 5 n = n * 2 6 s = s - n 7print(n)
Решение по шагам
6 шаговОбозначим через $t$ значение переменной после первой строки преобразования:
$$t = \left\lfloor\frac{s - 21}{10}\right\rfloor$$Чтобы программа вывела $32$, цикл должен выполниться пять раз. Значения переменной $n$ при этом последовательно равны $2$, $4$, $8$, $16$, $32$.
Перед пятым выполнением цикла значение $t$ должно быть не менее суммы первых четырёх вычитаний:
$$t \geq 2 + 4 + 8 + 16 = 30$$После пятого выполнения цикл должен завершиться, поэтому:
$$t - (2 + 4 + 8 + 16 + 32) < 0,\quad t < 62$$Максимальное целое значение $t$ равно $61$. Следовательно:
$$61 \leq \frac{s - 21}{10} < 62$$Наибольшее целое значение $s$, удовлетворяющее условию, равно:
$$s = 10 \cdot 61 + 21 + 9 = 640$$Где здесь ошибаются
Забывают, что первое умножение увеличивает n с 1 до 2.
Учитывают только условие для входа в цикл и не проверяют его завершение после пятого выполнения.
Получают 631 как минимальное, а не максимальное значение s.