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

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

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

2.  По­след­няя цифра дво­ич­ной за­пи­си уда­ля­ет­ся.

3.  Если ис­ход­ное число N было нечётным, в конец за­пи­си (спра­ва) до­пи­сы­ва­ют­ся цифры 10, если чет­ным  — 01.

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

 

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

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

2.  Уда­ля­ет­ся по­след­няя цифра, новая за­пись: 110.

3.  Ис­ход­ное число нечётно, до­пи­сы­ва­ют­ся цифры 10, новая за­пись: 11010.

4.  На экран вы­во­дит­ся число 26.

 

Какое число нужно вве­сти в ав­то­мат, чтобы в ре­зуль­та­те по­лу­чи­лось 2017?

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

Ре­ше­ние.

Пе­ре­ведём число 201710 в дво­ич­ную си­сте­му счис­ле­ния: 111 1110 00012. Уда­лим по­след­ние 2 цифры дво­ич­ной за­пи­си числа 2017. За­ме­тим, что число долж­но быть чётным, по­след­ние 2 цифры дво­ич­ной за­пи­си числа 2017 рав­ня­ют­ся 01. Сле­до­ва­тель­но, у ис­ко­мо­го числа по­след­няя цифра перед уда­ле­ни­ем была 0. Зна­чит, ис­ко­мое число  — 11 1111 00002  =  100810.

 

Ответ: 1008.

 

При­ве­дем дру­гое ре­ше­ние.

За­ме­тим, что если ис­ход­ное число было не­чет­ным, то оно окан­чи­ва­лось на 1. Таким об­ра­зом, уда­ле­ние по­след­ней цифры дво­ич­ной за­пи­си и до­бав­ле­ние в конец 10 со­от­вет­ству­ет до­бав­ле­нию 0 к ис­ход­но­му числу. Если же ис­ход­ное число было чет­ным, то оно окан­чи­ва­лось на 0, тогда уда­ле­ние по­след­ней цифры дво­ич­ной за­пи­си и до­бав­ле­ние в конец 01 со­от­вет­ству­ет до­бав­ле­нию 1 к ис­ход­но­му числу. Сле­до­ва­тель­но, ал­го­ритм ра­бо­ты ав­то­ма­та со­сто­ит в до­бав­ле­нии к дво­ич­ной за­пи­си числа 0, если число было не­чет­ным, или 1, если число было чет­ным.

В ре­зуль­та­те ра­бо­ты ав­то­ма­та по­лу­чи­лось 201710  =  111 1110 00012. Уда­лим по­след­нюю цифру и по­лу­чим ис­ход­ное число 11 1111 00002  =  100810.

 

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

for n in range(1, 10000):

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

s = str(s)

s = s[:-1]

if n % 2 != 0:

s += "10"

else:

s += "01"

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

if r == 2017:

print(n)


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

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