Решение: Анализ алгоритма с циклами
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наибольшее число $x$, при вводе которого алгоритм печатает сначала 7, а потом 21.
1x = int(input()) 2Q = 6 3P = 10 4K1 = 0 5K2 = 0 6while x <= 100: 7 K1 = K1 + 1 8 x = x + P 9while x >= Q: 10 K2 = K2 + 1 11 x = x - Q 12L = x + K1 13M = x + K2 14print(L) 15print(M)
Решение по шагам
4 шагаПосле первого цикла значение $x$ увеличивается на 10 до тех пор, пока не станет больше 100. Обозначим число выполнений цикла через $K_1$, а получившееся значение — через $y$.
$$y=x+10K_1, 101\le y\le110$$Второй цикл вычитает из $y$ число 6 $K_2$ раз. Поэтому после него остаётся остаток $z$ от деления $y$ на 6: $y=6K_2+z$, где $0\le z\le5$.
$$L=z+K_1=7,\quad M=z+K_2=21$$Из условий получаем $K_1=7-z$ и $K_2=21-z$. Тогда $y=6(21-z)+z=126-5z$. Так как $101\le y\le110$, возможны $z=4$ и $z=5$.
$$z=4\Rightarrow y=106,\ K_1=3,\ x=106-30=76;\quad z=5\Rightarrow y=101,\ K_1=2,\ x=101-20=81$$Наибольшее подходящее начальное значение — 81. Проверка: после первого цикла получаем $101$, затем второй цикл выполняется 16 раз и оставляет $5$; $L=5+2=7$, $M=5+16=21$.
$$x=81\Rightarrow L=7,\ M=21$$Где здесь ошибаются
Учитывают только остаток после второго цикла и забывают прибавить количество выполнений циклов.
Считают, что первый цикл выполняется до получения значения 100, хотя условие продолжения — $x\le100$.
Не проверяют все возможные значения остатка от деления на 6.