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

Каж­дое из­де­лие, из­го­тов­лен­ное на пред­при­я­тии, по­лу­ча­ет уни­каль­ный код, со­сто­я­щий из 30 сим­во­лов. Каж­дый сим­вол кода может быть ла­тин­ской бук­вой (за­глав­ной или строч­ной), де­ся­тич­ной циф­рой или спе­ци­аль­ным сим­во­лом из осо­бо­го тех­ни­че­ско­го на­бо­ра.

В базе дан­ных хра­нит­ся таб­ли­ца, со­дер­жа­щая все уже ис­поль­зо­ван­ные коды. При этом ис­поль­зу­ет­ся по­сим­воль­ное ко­ди­ро­ва­ние, каж­дый сим­вол ко­ди­ру­ет­ся оди­на­ко­вым ми­ни­маль­но воз­мож­ным чис­лом бит, а для хра­не­ния каж­до­го кода в целом от­во­дит­ся оди­на­ко­вое ми­ни­маль­но воз­мож­ное число байт.

Из­вест­но, что для хра­не­ния спис­ка из 4700 кодов вы­де­ле­но не более 180 Кбайт. Какое наи­боль­шее ко­ли­че­ство спе­ци­аль­ных сим­во­лов может вхо­дить в осо­бый тех­ни­че­ский набор?

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

Ре­ше­ние.

Для хра­не­ния каж­до­го из 4700 кодов по­тре­бо­ва­лось:

 дробь: чис­ли­тель: 180 умно­жить на 1024, зна­ме­на­тель: 4700 конец дроби мень­ше 40 байт.

Для хра­не­ния каж­до­го из 30 сим­во­лов по­тре­бо­ва­лось:

 дробь: чис­ли­тель: 39 умно­жить на 8, зна­ме­на­тель: 30 конец дроби мень­ше 11 бит.

За­ме­тим, что k бит поз­во­ля­ют ко­ди­ро­вать 2k сим­во­лов.

Всего сим­во­лов в таб­ли­це может быть 210 = 1024.

Так как, среди сим­во­лов могут быть де­ся­тич­ные цифры и 52 ла­тин­ские буквы (с учётом ре­ги­стра), то ко­ли­че­ство спе­ци­аль­ных сим­во­лов равно 1024 - 52 - 10 = 962

Ответ: 962.

 

 

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

for b in range(100,0,-1): # бит в коде од­но­го сим­во­ла

bits = b*30 # длина кода в битах

bytes = bits//8

if bits%8 != 0:

bytes += 1 # длина кода в бай­тах

if bytes*4700 <= 180*1024:

break # если 4700 кодов за­ни­ма­ют не более 180К

print(2**b - 2*26 - 10) # вы­чи­та­ем ко­ли­че­ство букв и цифр


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

Источник: Стат­Град: Тре­ни­ро­воч­ная ра­бо­та 24.10.2024 ИН2410101