Напечатать по 1 разу все последовательности длины n , состоящие из чисел 1..k . Их кол-во находится как k^n.
program nposledov;
{$APPTYPE CONSOLE}
uses
SysUtils,windows;
const n=3;
k=2;
type
TElem=integer;
TArr=array[1..n] of TElem;
TPrr=array[1..k] of TElem;
var
j,i,p: TElem;
Arr: TArr;
Prr: TPrr;
procedure nposled (var Ar:TArr; Pr: TPrr; p: TElem);
var i,j: integer;
begin
if p=n then begin
for i:=1 to n do begin
write(Arr[i])
end;
writeln
end
else begin
for j:=1 to k do begin
p:=p+1;
Ar[p]:=Ar[j];
nposled(Ar,Pr,p);
p:=p-1;
end;
end
end;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
p:=0;
writeln('введтие числа, из которых хотите получить последовательности');
for j:=1 to k do
readln(Prr[j]);
nposled(Arr,Prr,p);
readln
end.
М | Просьба использовать правильные теги. Исправлено |
Running "d:\...\pas\fp\fp110603_insomnia\fp110603_insomnia.exe "
введтие числа, из которых хотите получить последовательности
2
5
000
000
000
000
000
000
000
000
program nposledov;
{$APPTYPE CONSOLE}
uses
SysUtils,windows;
const n=3;
k=2;
type
TElem=integer;
TArr=array[1..n] of TElem;
TPrr=array[1..k] of TElem;
var
j,i,p: TElem;
Arr: TArr;
Prr: TPrr;
procedure nposled (var Ar:TArr; Pr: TPrr; p: TElem);
var i,j: integer;
begin
if p=n then begin
for i:=1 to n do begin
write(Arr[i])
end;
writeln
end
else begin
for j:=1 to k do begin
p:=p+1;
Ar[p]:=Ar[j];
nposled(Ar,Pr,p);
p:=p-1;
end;
end
end;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
p:=0;
writeln('введтие числа, из которых хотите получить последовательности');
for j:=1 to k do
readln(Prr[j]);
nposled(Arr,Prr,p);
readln
end.
Rprec:=0; m:=0;
while n<>0 do begin
r:=n mod 10;
if r<>Rprec then begin //нашли другое число
m:=0;
Rprec:=R;
end
else inc(m);
if m=2 then Parnoe:=True;
n:=n div 10;
end;
procedure nposled (var Ar:TArr; Pr: TPrr; p: TElem);- выводит то, что требуется: ввожу 7 и 8, получаю
var i, j: integer;
begin
if p=n then
begin
for i := 1 to n - 1 do
if ar[i] = ar[i+1] then exit;
for i:=1 to n do
begin
write(Ar[i]) // Да, здесь именно AR, а не ARR, как было у тебя
end;
writeln
end
else
begin
for j:=1 to k do
begin
p:=p+1;
Ar[p]:=pr[j]; // Да, здесь именно PR справа, а не AR как было у тебя
nposled(Ar,Pr,p);
p:=p-1;
end;
end
end;
да. большое спасибо. разобрался