Решение: Минимальное значение переменной
Определите, при каком наименьшем введённом значении переменной $s$ программа выведет число 32. Для Вашего удобства программа представлена на четырёх языках программирования.
1s = int(input()) 2s = (s - 21) // 10 3n = 1 4while s > 0: 5 n = n * 2 6 s = s - n 7print(n)
Решение по шагам
4 шагаЧтобы программа вывела 32, цикл должен выполниться пять раз: переменная $n$ последовательно принимает значения $2$, $4$, $8$, $16$, $32$.
За первые четыре итерации из начального значения переменной $s$ вычитается сумма $2 + 4 + 8 + 16 = 30$. Для начала пятой итерации полученное значение должно быть положительным, поэтому начальное значение после целочисленного деления должно быть не меньше 31.
$$s_0 - 30 > 0 \Rightarrow s_0 \geq 31$$Минимальное исходное значение переменной $s$ удовлетворяет условию $(s - 21) \mathbin{//} 10 = 31$. Минимальное такое значение равно $s = 331$.
Проверка: $(331 - 21) \mathbin{//} 10 = 31$, после четырёх итераций остаётся $1$, поэтому выполняется пятая итерация и программа выводит 32.
Где здесь ошибаются
Забывают, что перед пятой итерацией значение переменной $s$ должно быть положительным.
Вычитают начальное значение $n = 1$, хотя вычитание происходит после удвоения $n$.
Находят значение после деления, но не переводят его обратно в исходное значение переменной $s$.