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

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

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

2.  К этой за­пи­си до­пи­сы­ва­ют­ся спра­ва ещё два раз­ря­да по сле­ду­ю­ще­му пра­ви­лу:

а)  скла­ды­ва­ют­ся все цифры дво­ич­ной за­пи­си, и оста­ток от де­ле­ния суммы на 2 до­пи­сы­ва­ет­ся в конец числа (спра­ва). На­при­мер, за­пись 11100 пре­об­ра­зу­ет­ся в за­пись 111001;

б)  над этой за­пи­сью про­из­во­дят­ся те же дей­ствия  — спра­ва до­пи­сы­ва­ет­ся оста­ток от де­ле­ния суммы цифр на 2.

По­лу­чен­ная таким об­ра­зом за­пись (в ней на два раз­ря­да боль­ше, чем в за­пи­си ис­ход­но­го числа N) яв­ля­ет­ся дво­ич­ной за­пи­сью ис­ко­мо­го числа R.

Ука­жи­те ми­ни­маль­ное число R, ко­то­рое пре­вы­ша­ет 43 и может яв­лять­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма. В от­ве­те это число за­пи­ши­те в де­ся­тич­ной си­сте­ме.

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

Ре­ше­ние.

Если в числе было нечётное ко­ли­че­ство еди­ниц, то в конец до­пи­шет­ся 10. Если ко­ли­че­ство еди­ниц чётное, то до­пи­шет­ся 00. Рас­смот­рим числа, боль­шие 43. Имеем:

4410  =  1011002  — не может яв­лять­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма;

4510  =  1011012  — не может яв­лять­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма;

4610  =  1011102  — может яв­лять­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма, ко­ли­че­ство еди­ниц (кроме по­след­них двух раз­ря­дов) не­чет­ное, и в по­след­них двух раз­ря­дах 10.

 

Ответ: 46.

 

При­ведём дру­гое ре­ше­ние на языке 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 > 43:

print(r)

break

 

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

for n in range (1,100):

s = bin(n)[2:]

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

s += '00'

else:

s += '10'

r = int(s,2)

if r>43:

print(r)

break

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

for N in range(100):

s = bin(N)[2:]

k = s.count('1')

s = s + str(k % 2)

k = s.count('1')

s = s + str(k % 2)

R = int(s,2)

if R > 43:

print(R)

break

 

При­ведём ре­ше­ние Мат­вея Ах­тя­мо­ва на языке Python.

r = []

for n in range(1,1000):

s = bin(n)[2:]

a = s + (str(sum([int(i) for i in str(s)])%2))

b = a + (str(sum([int(i2) for i2 in str(a)])%2))

if int(b,2) > 43:

r.append(int(b,2))

print(min(r))


Аналоги к заданию № 8094: 19055 13733 18434 ... Все

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