Предмет: Информатика, автор: polinacistaa1253

Напишите код программы, пожалуйста
Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом:

Строится двоичная запись числа N.
Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже.
Шаг 2 повторяется ещё два раза.
Результат переводится в десятичную систему счисления.
При каком наибольшем исходном числе N < 500 в результате работы алгоритма получится число, которое делится на 4 и не делится на 8?


bestmzua: какой язык?
polinacistaa1253: python

Ответы

Автор ответа: poiklm246
1

Ответ:

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. последнее значение - результат работы

Похожие вопросы
Предмет: Русский язык, автор: cvbbnn