Решение: Подсчёт единиц в двоичной записи
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наибольшее число $x$, при вводе которого алгоритм печатает сначала 5, а потом 8.
Решение по шагам
4 шагаНа каждой итерации число $x$ целочисленно делится на 2, поэтому цикл выполняется столько раз, сколько разрядов в двоичной записи исходного числа. Следовательно, $M$ равно длине двоичной записи.
Условие $x \bmod 2 \ne 0$ выполняется для нечётных промежуточных значений, то есть для единичных разрядов двоичной записи. Поэтому $L$ равно количеству единиц.
Требуется восьмиразрядное двоичное число с пятью единицами. Наибольшее такое число получают, размещая единицы в старших разрядах: $11111000_2$.
Переведём число в десятичную систему: $1\cdot2^7+1\cdot2^6+1\cdot2^5+1\cdot2^4+1\cdot2^3=128+64+32+16+8=248$.
Где здесь ошибаются
Путают количество итераций цикла с количеством единиц в двоичной записи.
Выбирают восьмиразрядное число с пятью единицами, но размещают единицы не в старших разрядах.
Забывают, что ведущие нули не учитываются в длине двоичной записи.