• Предмет: Информатика
  • Автор: MrAlex634
  • Вопрос задан 3 месяца назад

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 1;
б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11.
Полученная таким образом запись является двоичной записью искомого числа R.
Например, для исходного числа 610 = 1102 результатом является число 1002 = 410, а для исходного числа 410 = 1002 результатом является число 11012 = 1310.
Укажите число N, после обработки которого с помощью этого алгоритма получается наименьшее значение R, большее 49. В ответе запишите это число в десятичной системе счисления.
Если можно, то ответ на питоне.

Ответы

Ответ дал: hypefaq
0

Для решения этой задачи необходимо применить алгоритм к каждому натуральному числу N от 50 до 1023 включительно и найти минимальное R, которое больше 49.

Ниже приведен код на Python, который реализует описанный алгоритм и выводит искомое значение N:

def count_ones(n):

   """

   Функция для подсчета количества единиц в двоичной записи числа n.

   """

   return bin(n).count('1')

min_r = float('inf')

min_n = None

for n in range(50, 1024):

   binary_str = bin(n)[2:]

   ones_count = count_ones(n)

   if ones_count % 2 == 0:

       binary_str += '0'

       binary_str = '1' + binary_str[2:]

   else:

       binary_str += '1'

       binary_str = '11' + binary_str[2:]

   r = int(binary_str, 2)

   if r > 49 and r < min_r:

       min_r = r

       min_n = n

print(min_n) # выводим искомое значение N


Ответ: 54

Вас заинтересует