Монетка при падении подает на одну из двух сторон. Попробуем обозначить одну из сторон 0, другую 1. Теперь если записать историю бросков такими символами мы получим сразу кодировку в двоичном коде. Например:
0111010101000100
При том каждый байт содержит максимальное количество информации, так-как в них нет закономерностей. По этому их нельзя сжать сильнее. Из этого следует что этот объем занимает чистая информация, как написано в условии задачи.
Итак, 1 бросок записывается в одном бите. Значит 16 бит нужно для сохранения истории бросков. Переведём биты в байты: 16 бит = 2 байта
PascalABC.NET 3.2, сборка 1387 от 20.02.2017 Внимание! Если программа не работает, обновите версию!
//const // MAX_ROW=5; // MAX_COL=8; begin var a:=MatrRandom(MAX_ROW,MAX_COL,10,99); a.Println(3); (var imax, var jmax, var imin, var jmin):=(0,0,0,0); for var i:=0 to MAX_ROW-1 do for var j:=0 to MAX_COL-1 do if a[i,j]>a[imax,jmax] then (imax,jmax):=(i,j) else if a[i,j]<a[imin,jmin] then (imin,jmin):=(i,j); for var i:=0 to MAX_ROW-1 do Swap(a[i,jmax],a[i,jmin]); Writeln('-'*3*MAX_COL); a.Println(3) end.
Для проверки работы программы снимите комментарии с первых трех строк.
Монетка при падении подает на одну из двух сторон. Попробуем обозначить одну из сторон 0, другую 1. Теперь если записать историю бросков такими символами мы получим сразу кодировку в двоичном коде. Например:
0111010101000100
При том каждый байт содержит максимальное количество информации, так-как в них нет закономерностей. По этому их нельзя сжать сильнее. Из этого следует что этот объем занимает чистая информация, как написано в условии задачи.
Итак, 1 бросок записывается в одном бите. Значит 16 бит нужно для сохранения истории бросков. Переведём биты в байты: 16 бит = 2 байта
ответ: 2 байта
Внимание! Если программа не работает, обновите версию!
//const
// MAX_ROW=5;
// MAX_COL=8;
begin
var a:=MatrRandom(MAX_ROW,MAX_COL,10,99); a.Println(3);
(var imax, var jmax, var imin, var jmin):=(0,0,0,0);
for var i:=0 to MAX_ROW-1 do
for var j:=0 to MAX_COL-1 do
if a[i,j]>a[imax,jmax] then (imax,jmax):=(i,j)
else
if a[i,j]<a[imin,jmin] then (imin,jmin):=(i,j);
for var i:=0 to MAX_ROW-1 do Swap(a[i,jmax],a[i,jmin]);
Writeln('-'*3*MAX_COL); a.Println(3)
end.
Для проверки работы программы снимите комментарии с первых трех строк.