Из комбинаторики известно, что, в случае непозиционного кода, количество комбинаций (кодов) n-разрядного кода является числом сочетаний с повторениями, равно биномиальному коэффициенту:
{\displaystyle {n+k-1 \choose k}=(-1)^{k}{-n \choose k}={\frac {\left(n+k-1\right)!}{k!\left(n-1\right)!}}}{n+k-1 \choose k}=(-1)^{k}{-n \choose k}={\frac {\left(n+k-1\right)!}{k!\left(n-1\right)!}}, [возможных состояний (кодов)], где:
{\displaystyle n}n — количество элементов в данном множестве различных элементов (количество возможных состояний, цифр, кодов в разряде),
{\displaystyle k}k — количество элементов в наборе (количество разрядов).
В двоичной системе кодирования (n=2) количество возможных состояний (кодов) равно :
{\displaystyle {\frac {\left(n+k-1\right)!}{k!\left(n-1\right)!}}={\frac {\left(2+k-1\right)!}{k!\left(2-1\right)!}}={\frac {\left(k+1\right)!}{k!1!}}=k+1}\frac{\left(n+k-1\right)!}{k!\left(n-1\right)!}=\frac{\left(2+k-1\right)!}{k!\left(2-1\right)!}=\frac{\left(k+1\right)!}{k!1!}=k+1, [возможных состояний (кодов)], то есть
описывается линейной функцией:
{\displaystyle N_{kp}(k)=k+1}N_{{kp}}(k)=k+1, [возможных состояний (кодов)], где
{\displaystyle k}k — количество двоичных разрядов.
Например, в одном 8-битном байте (k=8) количество возможных состояний (кодов) равно:
{\displaystyle N_{kp}(k)=k+1=8+1=9}N_{{kp}}(k)=k+1=8+1=9, [возможных состояний (кодов)].
В случае позиционного кода, число комбинаций (кодов) k-разрядного двоичного кода равно числу размещений с повторениями:
{\displaystyle N_{p}(k)={\bar {A}}(2,k)={\bar {A}}_{2}^{k}=2^{k}}N_{{p}}(k)={\bar {A}}(2,k)={\bar {A}}_{2}^{k}=2^{k}, где
{\displaystyle \ k}\ k — число разрядов двоичного кода.
Объяснение:
m=8;
n=6;
var
a:array[1..m,1..n] of integer;
st,t:string;
i,j,k,s:integer;
begin
Write('k='); Read(k);
Randomize;
Writeln('Исходная матрица A[',m,',',n,']');
st:='';
for i:=1 to m do begin
s:=0;
for j:=1 to n do begin
a[i,j]:=Random(15)-5; // [-5;9]
Write(a[i,j]:3);
s:=s+a[i,j]
end;
Writeln;
if s>k then begin
Str(i,t);
if st='' then st:=t
else st:=st+','+t
end
end;
if st<>'' then Writeln('Искомые строки: ',st)
end.
Пример
k=15
Исходная матрица A[8,6]
3 -5 6 8 0 2
1 1 5 2 0 1
0 -1 1 9 5 8
-1 -2 -3 3 -2 -2
8 7 5 6 5 3
8 -1 7 -3 7 3
3 -5 6 -1 0 4
7 1 9 1 4 6
Искомые строки: 3,5,6,8