Решение: Минимальное число по алгоритму
Ниже на пяти языках программирования записан алгоритм. Получив на вход натуральное десятичное число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наименьшее число $x$, при вводе которого алгоритм выводит сначала $8$, а потом $3$.
1x = int(input()) 2L = 0 3M = 0 4while x > 0: 5 M = M + 1 6 if x % 2 == 0: 7 L = L + x % 8 8 x = x // 8 9print(L) 10print(M)
Решение по шагам
4 шагаКаждая итерация заменяет $x$ на целую часть от деления на $8$, поэтому число итераций $M$ равно количеству цифр исходного числа в восьмеричной системе.
$$M = 3$$Величина $L$ увеличивается только тогда, когда текущая величина $x$ чётна. Остаток от деления на $8$ в этот момент является очередной восьмеричной цифрой. Следовательно, $L$ — сумма чётных восьмеричных цифр.
Нужно найти наименьшее трёхзначное восьмеричное число, у которого сумма чётных цифр равна $8$. Первая цифра не может быть чётной, иначе для минимального числа подобрать меньшие цифры невозможно; берём первую цифру $1$. Для двух последних цифр минимальная пара с суммой $8$ — $2$ и $6$.
Переводим найденное число из восьмеричной системы в десятичную.
$$x = (126)_8 = 1 \cdot 8^2 + 2 \cdot 8 + 6 = 64 + 16 + 6 = 86$$Где здесь ошибаются
Считать, что $L$ складывает все цифры, а не только чётные.
Забыть, что остаток $x \bmod 8$ является цифрой в восьмеричной системе.
Записать число $126$ как десятичное, не переведя его из восьмеричной системы.