Решение: Подсчёт единиц в двоичной записи
Ниже на пяти языках программирования записан алгоритм. Получив на вход число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наименьшее число $x$, при вводе которого алгоритм печатает сначала 3, а потом 7.
Решение по шагам
5 шаговНа каждой итерации число $x$ заменяется на результат целочисленного деления на 2. Поэтому $M$ равно длине двоичной записи исходного числа $x$.
При проверке остатка от деления на 2 переменная $L$ увеличивается для каждого нечётного остатка, то есть $L$ равно количеству единиц в двоичной записи числа.
Условие $M=7$ означает, что двоичная запись начинается с единицы и содержит 7 разрядов. Условие $L=3$ означает, что в ней ровно три единицы.
Минимальная семизначная двоичная запись с тремя единицами имеет единицы в старшем разряде и в двух младших разрядах: $1000011_2$.
Переводим число в десятичную систему: $1000011_2 = 2^6 + 2^1 + 2^0 = 64 + 2 + 1 = 67$.
Где здесь ошибаются
Путать $L$ и $M$: $L$ считает единицы в двоичной записи, а $M$ — её длину.
Выбирать не минимальную семизначную запись с тремя единицами.
Забывать, что старшая единица должна находиться в разряде $2^6$.