// PascalABC.NET 3.3, сборка 1547 от 07.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк/столбцов в матрице:'); Writeln('*** Исходная матрица ***'); var a:=MatrRandom(n,n,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); var (s,p):=(0,BigInteger(1)); for var i:=0 to n-1 do if (a[i,i]>0) and (a[i,i].IsEven) then s+=a[i,i] else if a[i,n-1-i].IsOdd then p*=a[i,n-i-1]; Writeln(s*p) end.
Будем считать, что появление символов равновероятно. Первое сообщение содержит х символов, тогда второе сообщение содержит 2,5х символов. Т. к. количество информации (I), которое содержит сообщение, закодированное с знаковой системы, равно количеству информации, которое несет один символ (i), умноженному на число символов в сообщении, то: I = x*i1 I = 2,5x*i2 А т. к. количество информации у нас одинаково, то: x*i1 = 2,5x*i2 i1 = 2,5*i2 2*i1 = 5*i2 А т. к. нам известно, что мощность каждого алфавита не превышает 32, то количество информации, которое несет один символ (i) вычисляется по фомуле: i <= log2(32). Т. к. на каждый символ приходится целое число битов, то i может принимать значения 1, 2, 3, 4, 5 битов. Подставляя эти значения в формулу соответствия между количеством информации, приходящимся на один символ для первого и второго алфавита 2*i1 = 5*i2, находим, что i1 = 5 и i2 = 2. Следовательно, мощность первого алфавита равна 2^5 = 32 символа, а второго алфавита равна 2^2 = 4 символа.
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк/столбцов в матрице:');
Writeln('*** Исходная матрица ***');
var a:=MatrRandom(n,n,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
var (s,p):=(0,BigInteger(1));
for var i:=0 to n-1 do
if (a[i,i]>0) and (a[i,i].IsEven) then s+=a[i,i]
else
if a[i,n-1-i].IsOdd then p*=a[i,n-i-1];
Writeln(s*p)
end.
Пример
Количество строк/столбцов в матрице: 13
*** Исходная матрица ***
1 -62 88 54 98 -68 -10 -69 39 -69 -83 32 -31
-55 -57 51 -44 -15 -5 6 83 42 -9 -27 11 22
-4 -61 -4 -7 -9 50 20 67 94 -57 24 -51 -1
21 40 -21 -87 -17 62 61 52 -19 23 -66 45 41
-93 -84 -82 58 47 16 -57 -23 35 -49 35 -54 40
-33 -87 1 -49 99 -73 -92 85 73 65 5 30 -92
10 50 69 -85 16 -38 48 49 44 5 50 -64 -5
-92 -94 -78 85 -11 43 66 43 -4 49 -49 -70 23
-93 38 55 -67 -50 13 -71 39 -93 -8 8 21 35
-26 -2 90 22 8 51 -84 5 -81 -98 64 88 -24
62 63 -35 -86 -98 18 85 92 -45 -89 94 11 -45
-63 -92 55 -98 14 14 -35 54 -30 -31 53 74 -59
-1 -85 -81 87 36 91 -55 74 51 -34 -25 93 -9
216716207400
Первое сообщение содержит х символов, тогда второе сообщение содержит 2,5х символов.
Т. к. количество информации (I), которое содержит сообщение, закодированное с знаковой системы, равно количеству информации, которое несет один символ (i), умноженному на число символов в сообщении, то:
I = x*i1
I = 2,5x*i2
А т. к. количество информации у нас одинаково, то:
x*i1 = 2,5x*i2
i1 = 2,5*i2
2*i1 = 5*i2
А т. к. нам известно, что мощность каждого алфавита не превышает 32, то количество информации, которое несет один символ (i) вычисляется по фомуле: i <= log2(32). Т. к. на каждый символ приходится целое число битов, то i может принимать значения 1, 2, 3, 4, 5 битов.
Подставляя эти значения в формулу соответствия между количеством информации, приходящимся на один символ для первого и второго алфавита 2*i1 = 5*i2, находим, что i1 = 5 и i2 = 2.
Следовательно, мощность первого алфавита равна 2^5 = 32 символа, а второго алфавита равна 2^2 = 4 символа.