Решение: Минимальное число по двоичной записи
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наименьшее число $x$, при вводе которого алгоритм печатает сначала 5, а потом 8.
1x = int(input()) 2L = 0 3M = 0 4while x > 0: 5 M = M + 1 6 if x % 2 != 0: 7 L = L + 1 8 x = x // 2 9print(L) 10print(M)
Решение по шагам
4 шагаПри каждом делении $x$ на 2 переменная $M$ увеличивается на 1. Поэтому $M$ равно числу разрядов двоичной записи исходного числа. Условие $M = 8$ означает, что число должно быть восьмиразрядным.
Переменная $L$ увеличивается, если очередной остаток от деления на 2 равен 1. Следовательно, $L$ равно количеству единиц в двоичной записи числа. Нужно ровно пять единиц.
Для минимального восьмиразрядного числа старший разряд должен быть равен 1, а остальные четыре единицы выгоднее всего расположить в младших разрядах: $10001111_2$.
Переведём число в десятичную систему: $2^7 + 2^3 + 2^2 + 2^1 + 2^0 = 128 + 8 + 4 + 2 + 1 = 143$.
Где здесь ошибаются
Путать количество разрядов с количеством единиц в двоичной записи.
Располагать единицы в старших разрядах, получая не минимальное число.
Забывать, что старший разряд восьмиразрядного числа обязан быть равен 1.