Ваша основная ошибка заключается в логике проверки четности числа и добавления разрядов. В первом коде вы проверяете количество единиц в двоичной записи числа, тогда как правильная логика должна проверять само число на четность или нечетность.
Давайте разберемся, как это должно работать и поправим ваш первый код:
Проверка числа на четность/нечетность должна производиться не через количество единиц в двоичной записи, а через остаток от деления на 2.
Двоичную запись можно получить с помощью встроенной функции bin().
def perekf(n):
rez = ""
while n > 0:
rez = str(n % 2) + rez
n = n // 2
return rez
for n in range(1, 300):
r = perekf(n)
if n % 2 == 0:
r = r + "01"
else:
r = "1" + r + "10"
if int(r, 2) > 214:
print(n)
break
На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом:
1) Строится двоичная запись числа N.
2) К этой записи дописываются еще несколько разрядов по следующему правилу: если число четное, то в конец числа (справа) дописывается 01, в противном случае - слева дописывается 1 и справа дописывается 10.
3) Результат переводится в десятичную систему исчисления и выводится на экран.
Например, N = 13; после выполнения пункта 1 получим запись 1101. После выполнения пункта 2 получаем число 1110110. Полученная таким образом запись является двоичной записью искомого числа R.
Найдите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 214. В ответе запишите это число в десятичной системе счисления.
Правильный ответ: 23
Мой код выдает 22, не могу найти ошибку
def perekf(n):
rez=""
while n>0:
rez= str(n%2)+rez
n=n//2
return(rez)
for n in range(1,300):
r = perekf(n)
if r.count("1")%2==0: r = r+"01"
else: r= "1"+r+"10"
if int(r,2)>214:
print(n)
break
А вот такой код выдает 23
for N in range (1, 1000) :
N_bin = bin (N) [2 : ]
if N % 2 == 0 :
N_bin += '01'
else :
N_bin = '1' + N_bin + '10'
if int (N_bin, 2) > 214 :
print (N)
break