24.03.2007, 16:01
общий
это ответ
Здравствуйте, Галя!
При любом заданном n это конечно весело :). Предлагаю ограничить пожелания каким-то разумным числом :). (при проверке программы не советую выбирать размер массива 10 и больше - будете ОЧЕНЬ ДОЛГО ждать окончания работы программы, так как в таком случае возможно 3628800 вариантов перестановок.)
program Project1;
const n=4; <i>{размер массива - ограничен только параметрами компьютера, но советую больше 9 не выбирать...}</i>
label 1;
var i,v,y,t,c:longint;
m,o:array[1..n] of integer;
otw:boolean;
<i>{Собственно процедура получения следующей перестановки}</i>
procedure perest(u:integer);
begin
o[u]:=o[u]+1;
if o[u]>n then begin
o[u]:=1;
perest(u-1);
end;
end;
begin
<i>{Вводим содержимое массива}</i>
for i:=1 to n do begin
write(i,‘-e chislo =‘);
o[i]:=i;
readln(m[i]);
end;
t:=1;
<i>{Считаем количество возможных перестановок}</i>
for c:=1 to n do t:=t*c;
writeln; c:=1;
for c:=1 to t do begin
<i>{выводим текущую перестановку}</i>
for i:=1 to n do write(m[o[i]],‘ ‘);
writeln;
<i>{получаем следующую перестановку}</i>
1: perest(n);
<i>{проверяем, если в перестановке используется больше одного раза один и тот же элемент массива, то идем опять получать перестановку}</i>
for v:=1 to n-1 do
for y:=v+1 to n do if o[v]=o[y] then goto 1;
end;
<i>{Ну и в конце выводим общее количество разных перестановок.}</i>
writeln(‘Kolichestvo perestanovok=‘,t);
readln;
end.
Будут вопросы - обращайтесь!
Удачи!
Приложение:
program Project1;
const n=4;
label 1;
var i,v,y,t,c:longint;
m,o:array[1..n] of integer;
otw:boolean;
procedure perest(u:integer);
begin
o[u]:=o[u]+1;
if o[u]>n then begin
o[u]:=1;
perest(u-1);
end;
end;
begin
for i:=1 to n do begin
write(i,‘-e chislo =‘);
o[i]:=i;
readln(m[i]);
end;
t:=1;
for c:=1 to n do t:=t*c;
writeln;c:=1;
for c:=1 to t do begin
for i:=1 to n do write(m[o[i]],‘ ‘);
writeln;
1: perest(n);
for v:=1 to n-1 do
for y:=v+1 to n do if o[v]=o[y] then goto 1;
end;
writeln(‘Kolichestvo perestanovok=‘,t);
readln;
end.