На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
- Строится двоичная запись числа N.
- Далее эта запись обрабатывается по следующему правилу:
а) если число N чётное, то к этой записи справа и слева дописываются по две единицы;
б) если число N нечётное, то в конец двоичной записи (справа) дописываются два нуля, а в начало (слева) дописывается единица.
- Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 1310 = 11012 результатом является число 11101002 = 12610, а для исходного числа 610 = 1102 — число 11110112 = 12310.
Укажите наибольшее число R, не превышающее 113, которое может быть результатом работы данного алгоритма.
В ответе запишите это число в десятичной системе счисления.
Решение
🔹 Шаг 1. Перебор чисел и двоичная запись
for N in range(1, 20):
R = f'{N:b}'
print(N, '→', R)
📌 Результат: 1 → 1, 2 → 10, 3 → 11, 19 → 10011 и т.д.
🔹 Шаг 2. Проверка чётности N
for N in range(1, 20):
R = f'{N:b}'
if N % 2 == 0:
print(N, R, 'чётное')
else:
print(N, R, 'нечётное')
📌 Результат: 1 1 нечётное, 2 10 чётное, 3 11 нечётное, 19 10011 нечётное и т.д.
🔹 Шаг 3. Изменение двоичной строки
for N in range(1, 20):
R = f'{N:b}'
if N % 2 == 0:
R = '11' + R + '11'
print(N, '→', R, '(11 слева и 11 справа)')
else:
R = '1' + R + '00'
print(N, '→', R, '(1 слева и 00 справа)')
📌 Результат: 1 → 1100 (1 слева и 00 справа), 2 → 111011 (11 слева и 11 справа), 3 → 11100 (1 слева и 00 справа), 19 → 11001100 (1 слева и 00 справа) и т.д.
🔹 Шаг 4. Перевод обратно в десятичное число
for N in range(1, 20):
R = f'{N:b}'
if N % 2 == 0:
R = '11' + R + '11'
else:
R = '1' + R + '00'
print(N, '→', R, '→', int(R, 2))
📌 Результат: 1 → 1100 → 12, 2 → 111011 → 59, 3 → 11100 → 28, 19 → 11001100 → 204 и т.д.
🔹 Шаг 5. Сборка полной программы и получение ответа
Цель: собрать всё вместе и понять задачу целиком.
best_R = 0
for N in range(1, 10000):
R = f'{N:b}'
if N % 2 == 0:
R = '11' + R + '11'
else:
R = '1' + R + '00'
R = int(R, 2)
if R <= 113 and R > best_R:
best_R = R
print(best_R)
📌 Результат: итоговый ответ программы. Ответ: 108.