1. Сначала нужно найти минимальную длину кода, который позволит занумеровать 800 человек. Понятно, что
800<2^n, где n - минимально.
Ясно, что n=10, потому что
512=2^9 < 800 < 2^10=1024
Ну а теперь совсем просто. Учащихся 320, код каждого 10бит, поэтому общий объём информации
320*10=3200бит = 3200/8 = 400байт.
Вот и всё.
Ну и ещё. 1. Понятно, что такую кодировку можно использовать, пока учащихся меньше 1025.
2. Приведенные рассуждения действительны для кодов одинаковой длины, существуют и другие коды, например, разной длины, самым известным представителем которой является код(азбука) Морзе. В этой кодировке, например, коды
1, 01, 001, 0001 - РАЗНЫЕ коды.
3. Из условия задачи не ясно, о какой кодировке идёт речь, но если о другой, то количество информации тоже несложно посчитать, правда, необходимо, например, зарезервировать какой-то код для разделителя, отделяющего один код от другого(у Морзе это немного более длинная пауза между символами, чем между 0 1(точкой и тире). Существуют и другие коды, например Брайля(для слепых), в котором, например РАЗНЫМ объектам соответствуют ОДИНАКОВЫЕ коды, напрмер, буквы А,Б,Ц,Д и цифры 1,2,3,4 кодируются одинаково, но там есть спец коды-регистры, определяющие, ЧТО будет идти за ними. И вообще оптимальное кодирование - это целая сложная наука, использующая самые последние достижения математики.
Успехов!
Поместить 2 (на сковородке 2- лепёшки)
Ждать 1 (обе лепёшки прожарились с одной стороны)
Убрать 1 (в тарелке - 1 полупрожаренная лепёшка и 3 обычных плюс в сковороде ещё 1 полупрожаренная лепёшка)
Перевернуть 1 (в тарелке - 1 полупрожаренная лепёшка и 3 обычных плюс в сковороде ещё 1 полупрожаренная лепёшка, лежащая на непрожаренной стороне) (в дальнейшем не комментирую действия)
Поместить 1
Ждать1
Убрать 1
Перевернуть 1
Поместить 1
Ждать1
Убрать 1
Перевернуть 1
Ждать1
Убрать 1
Перевернуть 1
Ждать1
Убрать 2
Говоря не алгоритмическим языком:
пронумеруем лепёшки цифрами 1 2 3 4 и 5
стороны лепёшек -a и A, b и B, c и C, d и D, e и E соответственно - тогда жарить будем следующим образом:
a b
B c
C d
D e
E A
Итого нам потребуется всего 5 минут.
def zadanie(n)
k = 0
for alice in 2..(n-2)
for basilio in 1..(n-3)
for duremar in 1..(n-3)
if alice > basilio and alice > duremar and alice + basilio + duremar == n
k += 1
p [alice, basilio, duremar]
end
end
end
end
return k
end
# # Примеры применения
p zadanie(16)
Вывод :
[6, 5, 5]
[7, 3, 6]
[7, 4, 5]
[7, 5, 4]
[7, 6, 3]
[8, 1, 7]
[8, 2, 6]
[8, 3, 5]
[8, 4, 4]
[8, 5, 3]
[8, 6, 2]
[8, 7, 1]
[9, 1, 6]
[9, 2, 5]
[9, 3, 4]
[9, 4, 3]
[9, 5, 2]
[9, 6, 1]
[10, 1, 5]
[10, 2, 4]
[10, 3, 3]
[10, 4, 2]
[10, 5, 1]
[11, 1, 4]
[11, 2, 3]
[11, 3, 2]
[11, 4, 1]
[12, 1, 3]
[12, 2, 2]
[12, 3, 1]
[13, 1, 2]
[13, 2, 1]
[14, 1, 1]
33
т.е