И что тут не так?
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр двоичной записи числа чётная, то к этой записи справа дописывается 11;
б) если сумма цифр двоичной записи числа нечётная, то к этой записи справа дописывается 01;
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 4 = 1002 результатом является число 100012 = 17, а для исходного числа 5 = 1012 это число 101112 = 23
Укажите минимальное число R, большее 61, которое могло получиться в результате работы данного алгоритма.
В ответе запишите это число в десятичной системе счисления.
def f(n):
s=''
while s:
s=str(n%2)+s
n//=2
return s
minr=100000000
for n in range(62,100):
r=f(n)
if r.count('1')%2==0:
r=r+'11'
else:
r=r+'01'
R=int(r,2)
minr=min(minr,int(r,2))
print(minr)
Алгоритм добавляет к числу справа 2 двоичных разряда.
62₁₀: 111110₂ -> 1111|10 -> 10 - не подходит
63₁₀: 111111₂ -> 1111|11 -> 1+1+1+1=4₁₀ -> чётное и 11 - подходит
Ответ: 63
БЕЗ написания кода.
Но если хочешь кодом, то:
minr = 128
for n in range(8, 32):
r = bin(n)[2:]
v = int(r + ['11', '01'][r.count('1') % 2], 2)
if v > 61: minr = min(minr, v)
print(minr)
for n in range(200):
a = bin(n)[2:]
if sum(map(int, a))%2==0:
a = a + '11'
if sum(map(int, a)) % 2 != 0:
a = a + '01'
r = int(a, 2)
if r>61:
print(r)
У меня получилось 63
да все нормально