Поделитесь своими знаниями, ответьте на вопрос:
Буфер состоит из 31 ячейки памяти. в память последовательно записываются пронумерованные блоки данных из 10 ячеек каждый. алгоритм записи реализован следующим образом: определяется, есть ли хотя бы одна последовательность из 10 идущих подряд пустых ячеек. если таких последовательностей нет, то выполнение алгоритма завершается. если есть одна или несколько таких последовательностей, то из всех вариантов таких последовательностей с равной вероятностью выбирается одна, и в нее записывается очередной блок данных. после этого осуществляется переход к шагу 1. запустив многократно этот алгоритм, петя понял, что после завершения алгоритма есть только два возможных варианта: в буфере оказываются записанными 2 или 3 блока данных. будем называть состоянием буфера после завершения алгоритма совокупность данных о том, какой по порядку записи блок в каких ячейках записан. важно отметить, что состояния, при которых в буфере заняты одни и те же ячейки, но разными по порядку записи блоками – различаются. для ускорения работы с буфером петя решил проиндексировать отдельно все возможные состояния буфера после завершения алгоритма, при которых в буфере оказались записанными ровно 2 блока (индекс типа a) и отдельно все возможные состояния буфера после завершения алгоритма, при которых в буфере оказались записанными ровно 3 блока (индекс типа b каждый индекс – целое число, уникально идентифицирующее соответствующее состояние. для хранения каждого индекса типа a петя решил выделить в памяти минимально возможное, одинаковое для всех индексов типа a количество бит x. для хранения каждого индекса типа b петя решил выделить в памяти минимально возможное, одинаковое для всех индексов типа b количество бит y. найдите x и y и запишите в ответе через пробел два целых числа – сначала значение x, затем значение y.
type omas=array[1..n] of integer;
Procedure Del (var z:omas; k:byte);
var i:byte;
begin
for i:=k to n-1 do z[i]:=z[i+1];
z[n]:=0;
end;
var a:omas; i,b:integer;
begin
Randomize;
for i:=1 to n do
begin
a[i]:=random(20);
write(a[i]:4);
end;
writeln;
b:=6;
i:=1;
while (i<=n)and(a[i]<>b) do i:=i+1;
if i<=n then
begin
Del(a,i);
writeln('Размерность массива = ',n-1);
for i:=1 to n-1 do write(a[i]:4);
writeln;
end else writeln('Массив не изменился');
end.
Пример:
12 13 6 7 17 1 18 17 3 2 12 3 16 6 7 13 0 2 5 18
Размерность массива = 19
12 13 7 17 1 18 17 3 2 12 3 16 6 7 13 0 2 5 18