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

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

1.  Стро­ит­ся дво­ич­ная за­пись числа N.

2.  Под­счи­ты­ва­ет­ся ко­ли­че­ство нулей и еди­ниц в по­лу­чен­ной за­пи­си. Если их ко­ли­че­ство оди­на­ко­во, в конец за­пи­си до­бав­ля­ет­ся её по­след­няя цифра. В про­тив­ном слу­чае в конец за­пи­си до­бав­ля­ет­ся та цифра, ко­то­рая встре­ча­ет­ся реже.

3.  Шаг 2 по­вто­ря­ет­ся ещё два раза

4.  Ре­зуль­тат пе­ре­во­дит­ся в де­ся­тич­ную си­сте­му.

 

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

1.  Дво­ич­ная за­пись числа N: 10011.

2.  В по­лу­чен­ной за­пи­си нулей мень­ше, чем еди­ниц, в конец за­пи­си до­бав­ля­ет­ся 0. Новая за­пись: 100110.

3.  В те­ку­щей за­пи­си нулей и еди­ниц по­ров­ну, в конец за­пи­сы­ва­ет­ся по­след­няя цифра, это 0. По­лу­ча­ет­ся 1001100. В этой за­пи­си еди­ниц мень­ше, в конец до­бав­ля­ет­ся 1: 10011001.

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

 

При каком наи­мень­шем числе N > 104 в ре­зуль­та­те ра­бо­ты ал­го­рит­ма по­лу­чит­ся число, крат­ное 4?

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

Ре­ше­ние.

За­ме­тим, что чтобы число было крат­но четырём, его дво­ич­ная за­пись долж­на окан­чи­вать­ся на «00».

Число на вы­хо­де долж­но пре­вы­шать 10410  =  11010002. Рас­смот­рим числа N, боль­шие или рав­ные 105, и опре­де­лим наи­мень­шее из них, при ко­то­ром ре­зуль­тат на экра­не ав­то­ма­та будет крат­ным 4:

10510  =  11010012, ре­зуль­та­том ра­бо­ты ал­го­рит­ма будет число 11010010012, что не крат­но 4;

10610  =  11010102, ре­зуль­та­том ра­бо­ты ал­го­рит­ма будет число 11010100012, что не крат­но 4.

10710  =  11010112, ре­зуль­та­том ра­бо­ты ал­го­рит­ма будет число 11010110002, что крат­но 4.

Таким об­ра­зом, ответ  — 107.

 

Ответ: 107.

 

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

for n in range(105, 1000):

s = bin(n)[2:] # пе­ре­вод в дво­ич­ную си­сте­му

s = str(s)

for i in range(3):

if s.count("1") == s.count("0"):

s += s[-1]

elif s.count("1") > s.count("0"):

s += "0"

else:

s += "1"

r = int(s, 2) # пе­ре­вод в де­ся­тич­ную си­сте­му

if r % 4 == 0:

print(n)

break


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

Раздел кодификатора ФИПИ: 1.6.3 По­стро­е­ние ал­го­рит­мов и прак­ти­че­ские вы­чис­ле­ния