• Предмет: Информатика
  • Автор: dimamushanov7
  • Вопрос задан 5 лет назад

Программист Василий очень любит изучать свойства чисел. Он
даже сам придумал свойство – потенциал числа. Чтобы найти потенциал
числа N, надо взять двоичную запись этого числа (начинается с единицы),
рассмотреть все циклические сдвиги этой записи и среди них выбрать
максимальное число. Например, для N = 11: 10112 = 11, 11012 = 13, 11102 =
14 и 01112 = 7. Следовательно, потенциал числа 11 равен 14.
Указать ответ для N = 44.

Ответы

Ответ дал: NarimanAbu1488
0

Ответ:

#Сначала определим функции

def ToBinary(n):  #функция для перевода в двоичную запись

   b = ""

   while n > 0:

       b = str(n % 2) + b

       n = n // 2

   return b

def ToDec(b): #функция для перевода из двоичной в десятичную запись

   d = 0

   for i in range(len(b)):

       d += int(b[i])*2**(len(b) - i-1)

   return d

def CycleShift(b): #функция для циклического сдвига

   a = b[1:len(b)] #копируем строку с первого элемента до конца

   a += b[0] #добавляем нулевой элемент в конец строки

   return a

#Теперь перейдем к глобальному коду

n = int(input()) #Вводим исходное число

b = ToBinary(n) #переводим в двоичную запись

maxshift = n #выбираем исходное число как максимальное число в сдвиге

for i in range(len(b)): #Проверяем все циклические сдвиги для нахождения максимального

   b = CycleShift(b)

   r = ToDec(b)  # переменная для хранения текущего значения циклически сдвинутого числа

   if r > maxshift: # если полученное число в результате сдвига больше предыдущего в maxshift сохранить это значение в maxshift

       maxshift = r

print("Результат",maxshift) #Вывод результата

Результаты:

44 - 101100

25 - 011001

50 - 110010

37  - 001011

11 - 001011

22 - 101100

В итоге получаем, что максимальное число это 50

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