Решение: Двоичное представление числа
Ниже на пяти языках программирования записан алгоритм. Получив на вход число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наименьшее число $x$, при вводе которого алгоритм печатает сначала $5$, а потом $6$.
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$ равно количеству цифр в двоичной записи исходного числа.
Условие $L = 5$ означает, что в двоичной записи числа ровно пять единиц.
Условие $M = 6$ означает, что двоичная запись содержит шесть разрядов. Чтобы число было наименьшим, старший разряд должен быть единицей, а оставшиеся пять разрядов должны содержать ещё четыре единицы и одну наименьшую возможную цифру в конце.
Наименьшая подходящая двоичная запись — $101111_2$. Переведём её в десятичную систему: $1 \cdot 32 + 0 \cdot 16 + 1 \cdot 8 + 1 \cdot 4 + 1 \cdot 2 + 1 = 47$.
Где здесь ошибаются
Путать количество итераций с количеством единиц в двоичной записи.
Выбрать двоичное число с пятью разрядами вместо шести.
Записать двоичное число $101111$ как десятичный ответ без перевода в десятичную систему.