Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 5. Информатика. ЕГЭ. Поляков-5991
- Просмотры: 425
- Изменено: 5 апреля 2025
(А. Богданов) На вход алгоритма подаётся натуральное число \(N.\) Алгоритм строит по нему новое число \(R\) следующим образом:
- Строится двоичная запись числа \(N.\)
- Далее эта запись обрабатывается по следующему правилу:
- а) если сумма цифр в двоичной записи числа чётная, то \(4\) младших бита инвертируются, т.е. \(0\) изменяется на \(1,\) а \(1\) на \(0;\)
- б) если сумма цифр в двоичной записи числа нечётная, то инвертируются \(4\) бита в двоичных разрядах \(1-4\) (нумерация разрядов справа налево, начиная с \(0\)).
- Полученная таким образом запись является двоичной записью искомого числа \(R.\)
Например, для исходного числа \(125 = 1111101_2\) результатом является число \(114 = 1110010_2,\) а для исходного числа \(227 = 11100011_2\) результатом является число \(253 = 11111101_2.\)
Укажите число \(N,\) большее \(63,\) после обработки которого с помощью этого алгоритма получается минимальное число \(R.\) В ответе запишите число в десятичной системе счисления.
Решение:
Python
def R(N):
bn = list(f'{N:b}')
start, end = (len(bn) - 4,len(bn)) if bn.count('1') % 2 == 0 else (len(bn) - 5,len(bn) - 1)
for i in range(start,end):
bn[i] = str((int(bn[i]) + 1) % 2)
return int(''.join(bn), 2)
#print(R(125), R(227))
min_R = 10*100
ans = 0
for N in range(64, 1000):
if R(N) < min_R:
min_R, ans = R(N), N
print(ans)
Ответ: \(94\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


