Напишите код программы, пожалуйста
Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом:
Строится двоичная запись числа N.
Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже.
Шаг 2 повторяется ещё два раза.
Результат переводится в десятичную систему счисления.
При каком наибольшем исходном числе N < 500 в результате работы алгоритма получится число, которое делится на 4 и не делится на 8?
Answers & Comments
Ответ:
225
Объяснение:
def figna(bin_n):
if bin_n.count('0') == bin_n.count('1'):
bin_n.append(bin_n[-1])
else:
if bin_n.count('0') < bin_n.count('1'):
bin_n.append('0')
else:
bin_n.append('1')
for N in range(500, 0, -1):
print(N, bin(N))
bin_n = list(bin(N)[2:])
figna(bin_n)
figna(bin_n)
figna(bin_n)
print(bin_n)
out = ''
for data in bin_n:
out += data
print(int(out, 2))
if (int(out, 2) % 4 == 0) and (int(out, 2) % 8 != 0):
print(N, 'STOP', int(out, 2))
break
просто цикл пустил в другую сторону
в выводе первое число - N. последнее значение - результат работы