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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

Ре­ше­ние.

Пе­ре­ведём число 201810 в дво­ич­ную си­сте­му счис­ле­ния: 111 1110 00102. Уда­лим по­след­ние 2 цифры дво­ич­ной за­пи­си числа 2018. За­ме­тим, что число долж­но быть нечётным, по­сколь­ку по­след­ние 2 цифры дво­ич­ной за­пи­си числа 2018 рав­ня­ют­ся 10. Зна­чит, ис­ко­мое число  — 11 1111 00012  =  100910.

 

Ответ: 1009.

 

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

За­ме­тим, что если ис­ход­ное число не­чет­ное, то по­след­няя цифра в его дво­ич­ной за­пи­си равна 1. Сле­до­ва­тель­но, уда­ле­ние по­след­ней цифры и до­пи­сы­ва­ние в конец 10 рав­но­силь­но до­пи­сы­ва­нию к ис­ход­но­му числу 0. Если же ис­ход­ное число было чет­ным, то по­след­няя цифра в его дво­ич­ной за­пи­си равна 0, и уда­ле­ние по­след­ней цифры и до­пи­сы­ва­ние в конец 01 рав­но­силь­но до­пи­сы­ва­нию к ис­ход­но­му числу 1. Таким об­ра­зом, ав­то­мат до­пи­сы­ва­ет к не­чет­но­му числу 0 и к чет­но­му числу 1. Сле­до­ва­тель­но, для вос­ста­нов­ле­ния ис­ход­но­го числа до­ста­точ­но уда­лить по­след­нюю дво­ич­ную цифру из по­лу­чив­ше­го­ся числа: 201810  =  111 1110 00102, после уда­ле­ния по­след­ней цифры по­лу­чим 11 1111 00012  =  100910. Это число яв­ля­ет­ся не­чет­ным, зна­чит, в ре­зуль­та­те ра­бо­ты ав­то­ма­та к нему дей­стви­тель­но будет до­пи­сан 0.

 

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

for n in range(2, 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 == 2018:

print(n)


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

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