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

На пред­при­я­тии каж­дой из­го­тов­лен­ной де­та­ли при­сва­и­ва­ют се­рий­ный номер, со­дер­жа­щий де­ся­тич­ные цифры, 26 ла­тин­ских букв (без учёта ре­ги­стра) и сим­во­лы из 8164-⁠сим­воль­но­го спе­ци­аль­но­го ал­фа­ви­та. В базе дан­ных для хра­не­ния каж­до­го се­рий­но­го но­ме­ра от­ве­де­но оди­на­ко­вое и ми­ни­маль­но воз­мож­ное число байт. При этом ис­поль­зу­ет­ся по­сим­воль­ное ко­ди­ро­ва­ние се­рий­ных но­ме­ров, все сим­во­лы ко­ди­ру­ют­ся оди­на­ко­вым и ми­ни­маль­но воз­мож­ным чис­лом бит. Из­вест­но, что для хра­не­ния 835 се­рий­ных но­ме­ров от­ве­де­но более 156 Кбайт па­мя­ти. Опре­де­ли­те ми­ни­маль­но воз­мож­ную длину се­рий­но­го но­ме­ра. В от­ве­те за­пи­ши­те толь­ко целое число.

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

Ре­ше­ние.

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

Для ко­ди­ро­ва­ния се­рий­но­го но­ме­ра, ис­поль­зу­ю­щей де­ся­тич­ные цифры, 26 ла­тин­ских букв (без учёта ре­ги­стра) и сим­во­лы из 8164⁠-⁠сим­воль­но­го спе­ци­аль­но­го ал­фа­ви­та, тре­бу­ет­ся 14 бит (ведь 214 = 16384 ).

Для хра­не­ния се­рий­но­го но­ме­ра тре­бу­ет­ся

x умно­жить на дробь: чис­ли­тель: 14 , зна­ме­на­тель: 8 конец дроби байт.

Для хра­не­ния но­ме­ров по­тре­бо­ва­лось:

 x умно­жить на дробь: чис­ли­тель: 14 , зна­ме­на­тель: 8 конец дроби мень­ше или равно дробь: чис­ли­тель: 156 умно­жить на 1024 , зна­ме­на­тель: 835 конец дроби байт.

Так как для хра­не­ния каж­до­го се­рий­но­го но­ме­ра от­ве­де­но оди­на­ко­вое и ми­ни­маль­но воз­мож­ное число байт:

 x умно­жить на дробь: чис­ли­тель: 14 , зна­ме­на­тель: 8 конец дроби мень­ше или равно 192 байт.

 x мень­ше или равно дробь: чис­ли­тель: 8 , зна­ме­на­тель: 14 конец дроби умно­жить на 192.

 x мень­ше или равно 110 .

Мак­си­маль­ная воз­мож­ная длина се­рий­но­го но­ме­ра 110.

 

Ответ: 110.

 

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

m = 10+26+8164 # мощ­ность ал­фа­ви­та

k = 1

while 2**k < m: k += 1 # ко­ли­че­ство бит в коде сим­во­ла

for l in range(1,10000): # l - длина се­рий­но­го но­ме­ра

bits = l*k # сколь­ко бит в се­рий­ном но­ме­ре

bytes = bits//8

if bits%8 != 0: bytes += 1 # сколь­ко бай­тов в се­рий­ном но­ме­ре

if bytes*835 > 156*1024: # если 835 се­рий­ных но­ме­ров не по­ме­ща­ют­ся в 156К

print(l)

break

Источник: ЕГЭ по ин­фор­ма­ти­ке 11.06.2025. Ос­нов­ная волна. Даль­ний Во­сток