Шешімі: Минимальное значение переменной
Определите, при каком наименьшем введённом значении переменной $s$ программа выведет число 64. Для Вашего удобства программа представлена на четырёх языках программирования.
1s = int(input()) 2s = (s - 21) // 10 3n = 1 4while s >= 0: 5 n = n * 2 6 s = s - n 7print(n)
Шешімін қадамдап көрсету
5 қадамПеременная n изначально равна 1 и на каждой итерации удваивается. Чтобы получить 64, цикл должен выполниться шесть раз.
$$1 \cdot 2^6 = 64$$На итерациях из переменной s последовательно вычитаются числа $2, 4, 8, 16, 32, 64$. Для выполнения шестой итерации значение s перед ней должно быть неотрицательным.
$$s_0 - (2 + 4 + 8 + 16 + 32) \geq 0$$Следовательно, после преобразования исходного значения переменная s должна быть не меньше 62.
$$s_0 \geq 2 + 4 + 8 + 16 + 32 = 62$$Ищем наименьшее исходное значение, при котором целочисленное деление даёт 62.
$$\left\lfloor\dfrac{s - 21}{10}\right\rfloor = 62 \Rightarrow s - 21 \geq 620 \Rightarrow s \geq 641$$При s = 641 после преобразования получаем 62, цикл выполняется алты раз, а программа выводит 64.
$$\dfrac{641 - 21}{10} = 62$$Где здесь ошибаются
Забывают, что первое умножение переводит n из 1 в 2.
Суммируют также число 64 при определении условия начала шестой итерации.
Не учитывают целочисленное деление при обратном переходе к исходному значению s.