На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N чётное, то слева к двоичной записи дописывается 10, а справа — 0;
б) если число N нечётное, то слева к двоичной записи дописывается 1, а справа — 11.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему счисления и выводится на экран.
Например, для исходного числа 1010 = 10102 результатом является число 10101002 = 8410, а для исходного числа 1310 = 11012 результатом является число 11101112 = 11910.
Укажите наименьшее число R, превышающее 180, которое может быть результатом работы данного алгоритма.
В ответе запишите это число в десятичной системе счисления.
Решение
🔹 Шаг 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 = '10' + R + '0'
print(N, '→', R, '(10 слева и 0 справа)')
else:
R = '1' + R + '11'
print(N, '→', R, '(1 слева и 11 справа)')
📌 Результат: 1 → 1111 (1 слева и 11 справа), 2 → 10100 (10 слева и 0 справа), 3 → 11111 (1 слева и 11 справа), 19 → 11001111 (1 слева и 11 справа) и т.д.
🔹 Шаг 4. Поиск минимального R > 180
# поиск минимального R > 180
MIN_R = 200
for N in range(1, 20):
R = f'{N:b}'
if N % 2 == 0:
R = '10' + R + '0'
else:
R = '1' + R + '11'
R = int(R, 2)
if R > 180:
MIN_R = min(R, MIN_R)
print(MIN_R)
📌 Результат: 199
🔹 Шаг 5. Поиск минимального R, превышающего 180
Цель: собрать всё вместе и понять задачу целиком.
MIN_R = 200
for N in range(1, 100):
R = f'{N:b}'
if N % 2 == 0:
R = '10' + R + '0'
else:
R = '1' + R + '11'
R = int(R, 2)
if R > 180:
MIN_R = min(R, MIN_R)
print(MIN_R)
📌 Результат: минимальное значение R, превышающее 180 (через MIN_R). Ответ: 184.