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

Каж­дый со­труд­ник пред­при­я­тия по­лу­ча­ет элек­трон­ный про­пуск, на ко­то­ром за­пи­са­ны лич­ный код со­труд­ни­ка, код под­раз­де­ле­ния и не­ко­то­рая до­пол­ни­тель­ная ин­фор­ма­ция. Лич­ный код со­сто­ит из 18 букв. Для фор­ми­ро­ва­ния кодов ис­поль­зу­ет­ся 15 раз­лич­ных букв, каж­дая из ко­то­рых может быть за­глав­ной или строч­ной. Для за­пи­си кода на про­пус­ке от­ве­де­но ми­ни­маль­но воз­мож­ное целое число байт. При этом ис­поль­зу­ют по­сим­воль­ное ко­ди­ро­ва­ние, все сим­во­лы ко­ди­ру­ют оди­на­ко­вым ми­ни­маль­но воз­мож­ным ко­ли­че­ством бит. Код под­раз­де­ле­ния  — целое трёхзнач­ное число, он за­пи­сан на про­пус­ке как дво­ич­ное число и за­ни­ма­ет ми­ни­маль­но воз­мож­ное целое число байт. Всего на про­пус­ке хра­нит­ся 30 байт дан­ных. Сколь­ко байт вы­де­ле­но для хра­не­ния до­пол­ни­тель­ных све­де­ний об одном со­труд­ни­ке? В от­ве­те за­пи­ши­те толь­ко целое число  — ко­ли­че­ство байт.

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

Ре­ше­ние.

k бит поз­во­ля­ют ко­ди­ро­вать 2k сим­во­лов, по­это­му для ко­ди­ро­ва­ния 30-⁠сим­воль­но­го ал­фа­ви­та тре­бу­ет­ся 5 бит (ведь 2 в сте­пе­ни 5 = 32 боль­ше или равно 30 пра­вая круг­лая скоб­ка . Для хра­не­ния 18 сим­во­лов тре­бу­ет­ся 18 умно­жить на 5 = 90 бит. Ми­ни­маль­ное ко­ли­че­ство байт, вме­ща­ю­щее в себя 90 бит,  — 12 байт (96 бит).

Код под­раз­де­ле­ния можно за­ко­ди­ро­вать 2 бай­та­ми, по­сколь­ку в 1 байт по­ме­ща­ют­ся толь­ко числа от 0 до 255, а в 2 байта  — числа от 0 до 216 − 1, то есть для за­пи­си лю­бо­го трех­знач­но­го числа до­ста­точ­но двух бай­тов.

Для хра­не­ния дан­ных об одном со­труд­ни­ке тре­бу­ет­ся 30 байт дан­ных. Из них 12 байт от­во­дит­ся на хра­не­ние лич­но­го кода, ещё 2 байта тре­бу­ет­ся для хра­не­ния но­ме­ра под­раз­де­ле­ния. Сле­до­ва­тель­но, для хра­не­ния до­пол­ни­тель­ных све­де­ний о со­труд­ни­ке от­во­дит­ся 16 байт.

 

Ответ: 16.

 

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

from math import ceil, log2

l_lk = 18

n_lk = 30

l_np = 1

n_np = 999

v_all = 30

i_lk = ceil(log2(n_lk))

v_lk = ceil(l_lk*i_lk/8)

i_np = ceil(log2(n_np))

v_np = ceil(l_np*i_np/8)

print(v_lk, v_np, v_all)

print(v_all - v_np - v_lk)


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

Раздел кодификатора ФИПИ: 1.1.3 Дис­крет­ное (циф­ро­вое) пред­став­ле­ние раз­лич­ной ин­фор­ма­ции