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

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

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

Ре­ше­ние.

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

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

Для хра­не­ния иден­ти­фи­ка­то­ра тре­бу­ет­ся

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

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

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

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

 x боль­ше или равно 109,3 .

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

 

Ответ: 110.

 

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

m = 10+20+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

Источник: ЕГЭ—2024. Ос­нов­ная волна 08.06.2024. Даль­ний Во­сток