5
1 балл демоверсия ЕГЭ-2026 сборник
Двоичная запись числа: алгоритм строит новое число
Задание 5 · Билет 2 · ЕГЭ по информатике
Билет 1 — демоверсия ЕГЭ-2026; остальные билеты — задания в формате экзамена (открытый сборник или тренировочные по образцу). Это тренировочные материалы, а не официальные КИМ. Ответы пересчитаны и сверены.
Условие
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом:
- Строится двоичная запись числа N.
- Если исходное число N чётное, то справа к двоичной записи приписывается 0, если нечётное — 1.
- Полученная запись обрабатывается по правилу:
- а) если количество единиц в записи кратно 3, два левых разряда заменяются на 11;
- б) если количество единиц не кратно 3, два левых разряда заменяются на 10.
Например: N=610=1102 → 10002=810; N=310=112 → 1112=710.
Вопрос. Укажите максимальное число N, после обработки которого получается R, не большее 37.
Попробуйте программой
Необязательно, но удобно: напишите здесь свой код на Python, который найдёт ответ. Если не получится — откройте решение и вставьте готовую программу одной кнопкой.
Решите программой на Python
в браузереНапишите свой код, который найдёт ответ, и нажмите «Выполнить». Горячая клавиша запуска: Ctrl/⌘ + Enter.
Результат
Здесь появится вывод print().
Не знаешь, как решать?
Открыть тренажёрПотренируйся выполнять алгоритм по шагам: переведи N в двоичную, измени биты и вернись в десятичную.
Решение
Решение
открыто шагов: 12 из 121 Шаг 1
Переписываем правило из условия. К двоичной записи числа N справа приписываем её последний бит: если N чётное — 0, если нечётное — 1. Затем считаем количество единиц: если оно кратно 3, два левых разряда заменяются на 11, иначе — на 10. Полученная запись — двоичная запись числа R.
2 Шаг 2
Проверяем правило на примерах. N=6 → 110 → приписываем 0 → 1100 (единиц 2, не кратно 3) → 11 меняем на 10 → 10002 = 8 ✓. N=3 → 11 → приписываем 1 → 111 (единиц 3, кратно 3) → 11 остаётся → 1112 = 7 ✓. Правило понято верно.
3 Шаг 3
Что ищем и в каком направлении. Нужно максимальное N, для которого R ≤ 37. Значения R(N) идут немонотонно, поэтому искать «на глаз» нельзя — только перебором. Так как нужен максимум, перебираем N сверху вниз и берём первое подходящее. Дальше для каждого N повторяем один и тот же порядок действий из следующих шагов.
4 Шаг 4
Двоичная запись N. Переводим текущее N в двоичную систему, например делением на 2 с остатком.
5 Шаг 5
Приписываем последний бит. Справа к записи дописываем её последнюю цифру: у чётного N это 0, у нечётного — 1 (бит чётности).
6 Шаг 6
Считаем единицы. Считаем, сколько единиц в полученной записи.
7 Шаг 7
Заменяем два левых разряда. Если единиц кратно 3 — ставим на их место 11, иначе — 10.
8 Шаг 8
Переводим обратно в десятичную. Полученная запись — это двоичная запись числа R; переводим её в десятичную и получаем R(N).
9 Шаг 9
Сравниваем R(N) с 37. Если R(N) ≤ 37 — при переборе сверху вниз это и есть искомое N, останавливаемся. Иначе берём следующее N (на 1 меньше) и повторяем шаги 4–8.
10 Шаг 10
Разбираем пример: N=26. 26 = 110102. Приписываем последний бит 0 → 1101002. Единиц 3 — кратно 3, значит два левых разряда заменяем на 11, и запись не меняется. Переводим: 1101002 = 52. Так как 52 > 37, N=26 не подходит — переходим к следующему N=25.
11 Шаг 11
Находим ответ. N=25: 25 = 110012 → приписываем 1 → 1100112 (единиц 4, не кратно 3) → два левых разряда заменяем на 10 → 1000112 = 35 ≤ 37. Это первое подходящее N при переборе сверху вниз, значит максимальное N = 25. Соседи: N=24 → R=32, N=25 → R=35, N=26 → R=52.
12 Шаг 12
Почему удобнее программой. Шаги 4–8 — один и тот же набор действий, повторённый для каждого N. Вручную это десятки однотипных операций (перевод в двоичную, подсчёт единиц, замена разрядов, обратный перевод), и одна арифметическая ошибка ломает ответ. Надёжнее один раз описать функцию R(N) и поручить перебор компьютеру: готовая программа — сразу под шагами, её можно вставить в песочницу выше одной кнопкой и запустить.
Программа, которая находит ответ:
def R(N): # функция: по числу N возвращает число R
b = f'{N:b}' # 1) переводим N в двоичную запись (строка из 0 и 1)
b += b[-1] # 2) приписываем справа последний бит: 0 для чётного, 1 для нечётного
if b.count('1') % 3 == 0: # 3) если количество единиц кратно 3 ...
b = '11' + b[2:] # ... заменяем два левых разряда на 11
else: # 4) иначе ...
b = '10' + b[2:] # ... заменяем два левых разряда на 10
return int(b, 2) # 5) переводим запись обратно в десятичную и возвращаем R
for N in range(100, 1, -1): # 6) перебираем N сверху вниз: нужен максимум
if R(N) <= 37: # 7) проверяем условие R ≤ 37
print(N) # 8) первое подходящее сверху — это ответ
break # 9) останавливаемся, дальше искать не нужно Правильный ответ этого билета: 25
Проверка: N=25 → R=35 ≤ 37, а R(26)=52 > 37. Ответ совпадает с опубликованным в источнике.
Теория и другие билеты
Разбор с нуля, типовые ошибки, частые вопросы и все билеты задания 5 — на странице задания.