|
����������: ������������� � �������.
H��������� ��� ������������������ ����� N �� �����
1,2,...,M.
First = (1,1,...,1)
Last = (M,M,...,M)
����� ����� ������������������� ����� M^N (��������!). ����� ������. ��� ������ ����������� ��������� Next, ������ � ��������.
����� N=4,M=3. �����:
Next(1,1,1,1) -> (1,1,1,2)
Next(1,1,1,3) -> (1,1,2,1)
Next(3,1,3,3) -> (3,2,1,1)
������ ����� �������� ����� ��������� Next:
procedure Next;
begin
{����� i: X[i]<M,X[i+1]=M,...,X[N]=M};
X[i]:=X[i]+1;
X[i+1]:=...:=X[N]:=1
end;
���� ������ i ����� �� �������, �� ��������� ������������������
��� - �� ��������� �� ��������� (M,M,...,M). ������� �����, ���
���� �� ������� ������������������ ���� ����� �� �� 1 �� M, � ��
0 �� M-1, �� ������� � ��������� ������� �� ����������� 1 � M-����� ������� ���������. ������ ��������� �� ������� �������� ���:
program Sequences;
type Sequence=array [byte] of byte;
var M,N,i:byte;
X:Sequence;
Yes:boolean;
procedure Next(var X:Sequence;var Yes:boolean);
var i:byte;
begin
i:=N;
{����� i}
while (i>0)and(X[i]=M) do begin X[i]:=1;dec(i) end;
if i>0 then begin inc(X[i]);Yes:=true end
else Yes:=false
end;
begin
write('M,N=');readln(M,N);
for i:=1 to N do X[i]:=1;
repeat
for i:=1 to N do write(X[i]);writeln;
Next(X,Yes)
until not Yes
end.
������� ����� ��������.
������ ����������� ���������
Generate(k), ������������� ��� ������������������ ����� N �� ����� 1,...,M, � ������� ����������� ������ X[1],X[2],...,X[k]. �������, ��� ��� k=N �� ����� ����������� �������: ���� ������ ����
����� ������������������ - ��� ��� ����. ��� k<N ����� �������
������ � k+1:
procedure Generate(k:byte);
var i,j:byte;
begin
if k=N then
begin for i:=1 to N do write(X[i]);writeln end
else
for j:=1 to M do
begin X[k+1]:=j; Generate(k+1) end
end;
�������� ��������� ������ �������� ����� ������:
program SequencesRecursion;
type Sequence=array [byte] of byte;
var M,N:byte;
X:Sequence;
procedure Generate(k:byte);
............
begin
write('M,N=');readln(M,N);
Generate(0)
end.
| |