Условие Фано означает, что никакое кодовое слово не может быть началом другого кодового слова. Поскольку буква Н кодируется нулем, значит, мы не можем кодировать Л и М таким образом, чтобы оно начиналось с нуля. Значит, будем кодировать так, чтобы начиналось с единицы. Допустим, Л - 11. Тогда М невозможно закодировать двумя символами. Значит, будем использовать три. Пусть Л - 110, а М - 111. Следовательно: Н = 0 (1 символ) К = 10 (2 символа) Л = 110 (3 символа) М = 111 (3 символа)
var T: array[1..n + 1] of integer; i, j, k: integer;
begin Writeln('Введите ', n, ' элементов массива'); for i := 1 to n do Read(T[i]); Write('Укажите индекс числа и само число для вставки: '); Readln(j, k); for i := n downto j do T[i + 1] := T[i]; T[j] := k; Writeln('Результирующий массив:'); for i := 1 to n + 1 do Write(T[i], ' ') end.
Тестовое решение: Введите 10 элементов массива -5 3 12 81 35 0 43 92 -23 53 Укажите индекс числа и само число для вставки: 4 777 Результирующий массив: -5 3 12 777 81 35 0 43 92 -23 53
Н = 0 (1 символ)
К = 10 (2 символа)
Л = 110 (3 символа)
М = 111 (3 символа)
Наименьшая возможная суммарная всех кодов будет: 1 + 2 + 3 + 3 = 9
n = 10;
var
T: array[1..n + 1] of integer;
i, j, k: integer;
begin
Writeln('Введите ', n, ' элементов массива');
for i := 1 to n do Read(T[i]);
Write('Укажите индекс числа и само число для вставки: ');
Readln(j, k);
for i := n downto j do T[i + 1] := T[i];
T[j] := k;
Writeln('Результирующий массив:');
for i := 1 to n + 1 do Write(T[i], ' ')
end.
Тестовое решение:
Введите 10 элементов массива
-5 3 12 81 35 0 43 92 -23 53
Укажите индекс числа и само число для вставки: 4 777
Результирующий массив:
-5 3 12 777 81 35 0 43 92 -23 53