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

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

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

2.  Скла­ды­ва­ют­ся все цифры по­лу­чен­ной дво­ич­ной за­пи­си. В конец за­пи­си (спра­ва) до­пи­сы­ва­ет­ся оста­ток от де­ле­ния суммы на 2.

3.  Преды­ду­щий пункт по­вто­ря­ет­ся для за­пи­си с до­бав­лен­ной циф­рой.

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

 

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

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

2.  Сумма цифр дво­ич­ной за­пи­си  — 3, оста­ток от де­ле­ния на 2 равен 1, новая за­пись: 11011.

3.  Сумма цифр по­лу­чен­ной за­пи­си  — 4, оста­ток от де­ле­ния на 2 равен 0, новая за­пись: 110110.

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

 

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

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

Ре­ше­ние.

Рас­смот­рим числа, боль­шие 93, и най­дем мень­шее число, ко­то­рое яв­ля­ет­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма.

94  =  10111102  — не яв­ля­ет­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма.

95  =  10111112  — не яв­ля­ет­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма.

96  =  11000002  — яв­ля­ет­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма для числа 110002.

 

Ответ: 96.

 

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

def f(s):

summa = 0

for i in range(len(s)):

summa += int(s[i])

return summa

for n in range(1, 100):

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

s = str(s)

summa = f(s)

s = s + str(summa % 2)

summa = f(s)

s = s + str(summa % 2)

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

if r > 93:

print(r)

break

 

При­ведём ре­ше­ние языке Python (Тагир Ши­гер­ба­ев, Но­во­узенск).

for n in range(1, 100):

s = bin(n)[2:]

if s.count('1') % 2 == 0:

s += '0'

else:

s += '1'

if s.count('1') % 2 == 0:

s += '0'

else:

s += '1'

r = int(s, 2)

if r > 93:

print(r)

break

 

При­ведём ре­ше­ние Бо­ри­са Са­ве­лье­ва языке Python.

a=[]

for n in range(1, 1000):

s = bin(n)[2:]

s=s + str(s.count('1') % 2)

s = s + str(s.count('1') % 2)

if int(s,2)>93:

a.append(int(s,2))

print(min(a))


Аналоги к заданию № 15791: 15818 15943 Все

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