Известно, что слово КАШКА закодировали с последовательности 1110110011101. При этом код удовлетворяет условию Фано. Найдите минимальную длину кодовой последовательности для слова ПАМПУШКА? Известно, что другие буквы в кодируемой последовательности встретиться не могут.
mm = 10;
nn = 8;
type
M = array[1..mm, 1..nn] of integer;
KS = array[1..2, 1..nn] of integer;
procedure GetKS(var a: M; var b: KS; m, n: integer);
{ Помещает в b[1,*] суммы отрицательных элементов массива а[m,n] по столбцам,
а в b[2,*] - количества этих элементов }
var
i, j, s, k: integer;
begin
for j := 1 to n do
begin
k := 0; s := 0;
for i := 1 to m do
if a[i, j] < 0 then begin s := s + a[i, j]; Inc(k) end;
b[1, j] := s; b[2, j] := k
end
end;
procedure Init(var a: M; m, n: integer);
{ Заполняет массив a[m,n] случайными значениями на интервале [-50;50]
и выводит их на экран }
var
i, j: integer;
begin
for i := 1 to m do
begin
for j := 1 to n do
begin
a[i, j] := Random(101) - 50;
Write(a[i, j]:5)
end;
Writeln
end
end;
procedure OutKS(var a: KS; n: integer);
{ Выводит на экран элементы массива a[2,n]}
var
i, j: integer;
begin
for i := 1 to 2 do
begin
for j := 1 to n do Write(a[i, j]:5);
Writeln
end
end;
procedure Work(var a: M; var b: KS; m, n: integer);
{ цикл работы с массивом }
begin
Init(a, m, n);
GetKS(a, b, m, n);
Writeln('Суммы и количество');
OutKS(b, n);
end;
var
X, Y: M;
Z: KS;
begin
Writeln('Массив Х');
Work(X, Z, 10, 8);
Writeln;
Writeln('Массив Y');
Work(Y, Z, 6, 8);
end.
Тестовое решение:
Массив Х
-50 49 0 28 -8 -27 -4 -45
10 10 10 27 17 15 -35 47
-22 -42 21 40 -40 -4 1 -49
-21 37 5 -34 26 10 -33 -26
2 27 30 -46 -9 -2 33 2
-3 6 -9 -38 -29 -18 -36 28
-8 39 -16 49 -50 39 -37 5
-2 -2 -2 6 18 -21 -20 -50
-7 -15 -26 40 35 -40 5 31
-25 -31 -8 4 -45 -11 31 48
Суммы и количество
-138 -90 -61 -118 -181 -123 -165 -170
8 4 5 3 6 7 6 4
Массив Y
22 27 24 38 -24 -32 -26 13
14 -25 6 44 50 -24 34 -33
-24 -10 20 36 -43 -25 44 -19
-17 4 23 31 -4 9 -1 -41
17 1 34 42 6 -8 25 -26
-40 11 -24 10 4 12 31 50
Суммы и количество
-81 -35 -24 0 -71 -89 -27 -119
3 2 1 0 3 4 2 4
A:array[1..60] of integer;
k,i,MIN,ind, MAX,SUM:integer;
begin
SUM:=0;
readln(k);
randomize;
writeln('Исходный массив:');
for i:=1 to 60 do
begin
A[i]:=random(15)-5;
Writeln('A[',i,']=',A[i]);
end;
MIN:=32600;
MAX:=-32600;
for i:=1 to 60 do //Ищем минимальный элемент
begin
if a[i]<MIN then
MIN:=a[i];
ind:=i;
end;
for i:=1 to 60 do //Ищем максимальный элемент
if a[i]>MAX then
MAX:=a[i];
for i:=60 downto 60-k do //Сумма последних k элементов
SUM:=SUM+a[i];
A[ind]:=SUM;
if A[1]>=0 then
for i:=1 to 60 do
begin
A[i]:=A[i]*sqr(MIN);
Writeln('A[',i,']=',A[i]);
end
else
for i:=1 to 60 do
begin
A[i]:=A[i]*sqr(MAX);
Writeln('A[',i,']=',A[i]);
end;
end.