На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается так:
а) если число N нечётное, к двоичной записи слева дописывается 10, а последние две цифры справа заменяются на 01;
б) если число N чётное, к двоичной записи справа дописывается 1, а первые две цифры слева заменяются на 11.
Таким образом получается двоичная запись искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 1010 = 10102 результатом является число 111012 = 2910, а для исходного числа 910 = 10012 — число 1010012 = 4110.
Укажите минимальное число R, которое может быть результатом этого алгоритма при условии, что N не меньше 50.
В ответе запишите это число в десятичной системе счисления.
Решение
🔹 Шаг 1. Перебор чисел и двоичная запись
# перебор чисел и двоичная запись
for N in range(1, 20):
R = f'{N:b}'
print(N, '→', R)
📌 Результат: 1 → 1, 2 → 10, 3 → 11, 19 → 10011 и т.д.
🔹 Шаг 2. Проверка чётности N
# проверка чётности 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[2:] + '1'
print(N, '→', R, '(два старших разряда на 11 и 1 справа)')
else:
R = '10' + R[:-2] + '01'
print(N, '→', R, '(10 слева и два младших разряда на 01)')
📌 Результат: 1 → 1001 (10 слева и два младших разряда на 01), 2 → 111 (два старших разряда на 11 и 1 справа), 3 → 1001 (10 слева и два младших разряда на 01), 19 → 1010001 (10 слева и два младших разряда на 01) и т.д.
🔹 Шаг 4. Перевод обратно в десятичное число
# перевод обратно в десятичное число
for N in range(1, 20):
R = f'{N:b}'
if N % 2 == 0:
R = '11' + R[2:] + '1'
else:
R = '10' + R[:-2] + '01'
print(N, '→', R, '→', int(R, 2))
📌 Результат: 1 → 1001 → 9, 2 → 111 → 7, 3 → 1001 → 9, 19 → 1010001 → 81 и т.д.
🔹 Шаг 5. Поиск минимального R при N > 49
Цель: собрать всё вместе и понять задачу целиком.
best_R = None
for N in range(50, 10000):
R = f'{N:b}'
if N % 2 == 0:
R = '11' + R[2:] + '1'
else:
R = '10' + R[:-2] + '01'
R = int(R, 2)
if best_R is None or R < best_R:
best_R = R
print(best_R)
📌 Результат: минимальное значение R при условии N > 49. Ответ: 101.