Top.Mail.Ru
Ответы

И что тут не так?

На вход алгоритма подаётся натуральное число 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)

По дате
По рейтингу
Аватар пользователя
Высший разум
4мес

Алгоритм добавляет к числу справа 2 двоичных разряда.

12
 62₁₀: 111110₂ -> 1111|10 -> 10 - не подходит
63₁₀: 111111₂ -> 1111|11 -> 1+1+1+1=4₁₀ -> чётное и 11 - подходит 

Ответ: 63
БЕЗ написания кода.

Но если хочешь кодом, то:

123456
 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) 
Аватар пользователя
Гуру
4мес

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

Аватар пользователя
Просветленный
4мес

да все нормально