


Помогите, пожалуйста, с информатикой. 5 задание егэ
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
2. Далее
1. Строится двоичная запись числа N.
если исходное число чётное, то справа к построенной двоичной записи
числа N приписывается 0, если нечётное, то приписывается 1.
3. Далее полученная на втором шаге алгоритма запись обрабатывается по следующему правилу:
a) если количество единиц в двоичной записи кратно трём, то в этой записи два левых разряда заменяются на 11;
б) если количество единиц в двоичной записи некратно трём, то в этой записи два левых разряда заменяются на 10.
Полученная таким образом запись является двоичной записью искомого числа R.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее, чем 26. В ответе запишите это число в десятичной системе счисления.
26 -> 11010 -> 5 двоичный разядов, минимально возможное N = 8
перебираем:
8 -> 1000 -> 1000|0 -> 10|000 -> 16 не подходит
9 -> 1001 -> 1001|1 -> 11|011 -> 27 подходит
Ответ: 9
Но если хочешь кодом, то:
for i in range(8, 17):
s = bin(i)[2:] + '01'[i % 2]
if int(['10', '11'][s.count('1') % 3 == 0] + s[2:], 2) >= 26: break
print(i)
for N in range(1, 200): # от 1, потому что в задании написано натуральное число
N_2 = bin(N)[2:] # перевод в двоичную
if N_2[-1] == '0':
N_2 = N_2 + '0'
else:
N_2 = N_2 + '1'
if N_2.count('1') % 3 == 0:
N_2 = '1111' + N_2[2:]
else:
N_2 = '1010' + N_2[2:]
R = int(N_2, 2) # перевод в 10чную систему
if R >= 26:
print(N)
Хз чет я не уверен в верности. Если у тебя есть ответ, посмотри, правильно ли я сделал
for n in range(1,9999):
s=bin(n)[2:]+('0'if n%2==0 else'1')
s=('11'if s.count('1')%3==0 else'10')+s[2:]
if int(s,2)>=26:
print(n)
break