Задания
Версия для печати и копирования в MS Word
Тип 5 № 73831
i

Ал­го­ритм по­лу­ча­ет на вход на­ту­раль­ное число N и стро­ит по нему новое число R сле­ду­ю­щим об­ра­зом.

1.  Стро­ит­ся дво­ич­ная за­пись числа N без ве­ду­щих нулей.

2.  Под­счи­ты­ва­ет­ся ко­ли­че­ство еди­ниц и ко­ли­че­ство нулей в по­лу­чен­ной дво­ич­ной за­пи­си. Эти числа пе­ре­во­дят­ся в дво­ич­ную си­сте­му и за­пи­сы­ва­ют­ся друг за дру­гом без ис­поль­зо­ва­ния ве­ду­щих нулей: сна­ча­ла ко­ли­че­ство еди­ниц, затем ко­ли­че­ство нулей.

3.  Ре­зуль­та­том ра­бо­ты ал­го­рит­ма ста­но­вит­ся де­ся­тич­ная за­пись по­лу­чен­но­го числа R.

 

При­мер. Дано число N  =  17. Ал­го­ритм ра­бо­та­ет сле­ду­ю­щим об­ра­зом.

1.  Стро­им дво­ич­ную за­пись: 1710  =  100012.

2.  В по­лу­чен­ном дво­ич­ном числе две еди­ни­цы и три нуля. Пе­ре­во­дим в дво­ич­ную си­сте­му: 210  =  102, 310  =  112. За­пи­сы­ва­ем под­ряд: 1011.

3.  Пе­ре­во­дим в де­ся­тич­ную си­сте­му: 10112  =  1110.

Ре­зуль­тат ра­бо­ты ал­го­рит­ма R  =  11.

Опре­де­ли­те ми­ни­маль­ное число N, для ко­то­ро­го ре­зуль­та­том ра­бо­ты дан­но­го ал­го­рит­ма будет R  =  214.

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние на языке Python.

cislo = bin(214)[2:]

one, zero, otv = [], [] , []

for i in range(len(cislo) - 1):

if cislo[i + 1] != '0':

one.append(int(cislo[:i + 1], 2))

zero.append(int(cislo[i+1:], 2))

for j in range(len(one)):

otv.append(int('1' + '0' * int(zero[j]) + '1'*int(one[j]-1),2))

print(min(otv))

 

 

Ответ: 134217759.

 

При­ведём ана­ли­ти­че­ское ре­ше­ние Фёдора Гра­нов­ско­го.

Пе­ре­ве­дем число 214 в дво­ич­ную си­сте­му: 21410 = 110101102. Дан­ное дво­ич­ное число на два числа без ве­ду­щих нулей может быть раз­би­то че­тырь­мя спо­со­ба­ми: 1, 1010110; 110, 10110; 11010, 110; 110101, 10. Ми­ни­маль­ное ко­ли­че­ство зна­ков  — 28, в по­лу­ча­е­мом дво­ич­ном числе, будет при раз­би­е­нии 1102 = 610, 101102 = 2210, то есть в ре­зуль­та­те по­лу­чит­ся число со­сто­я­щее из шести еди­ниц и два­дца­ти двух нулей. Ми­ни­маль­ное такое число: 10000000000000000000000000111112 = 227 + 31 = 13421775910.


Аналоги к заданию № 73831: 73860 Все