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

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

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

2.  В конец дво­ич­ной за­пи­си до­бав­ля­ет­ся дво­ич­ный код остат­ка от де­ле­ния числа N на 4.

3.  Ре­зуль­та­том ра­бо­ты ал­го­рит­ма ста­но­вит­ся де­ся­тич­ная за­пись по­лу­чен­но­го числа R.

 

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

1.  Стро­им дво­ич­ную за­пись: 1310  =  11012.

2.  Оста­ток от де­ле­ния 13 на 4 равен 1, до­бав­ля­ем к дво­ич­ной за­пи­си цифру 1, по­лу­ча­ем 110112  =  2710.

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

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

1.  Стро­им дво­ич­ную за­пись: 1410  =  11102.

2.  Оста­ток от де­ле­ния 14 на 4 равен 2, до­бав­ля­ем к дво­ич­ной за­пи­си цифры 10 (102  =  210), по­лу­ча­ем 1110102  =  5810.

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

 

На­зо­вем до­ступ­ны­ми числа, ко­то­рые могут по­лу­чить­ся в ре­зуль­та­те ра­бо­ты этого ал­го­рит­ма. На­при­мер, числа 27 и 58  — до­ступ­ные.

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

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

Ре­ше­ние.

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

t = [0]*10000

for n in range(1,1000):

s = bin(n)[2:] + bin(n%4)[2:]

r = int(s,2)

t[r] = 1

 

maxi = 0

for i in range(1000):

maxi = max( maxi, sum(t[i : i + 65]))

 

print(maxi)

 

Ответ: 25.

 

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

a = []

for n in range (1,1000):

a.append(int((bin(n)[2:]+bin(n%4)[2:]),2))

maxi = 0

for i in range (0,len(a)):

cnt = 0

s1 = a[i]

s2 = a[i]+65

for j in range (i,len(a)):

if a[j] >= s1 and a[j] < s2:

cnt+=1

maxi = max(cnt,maxi)

print(maxi)


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