Консультация № 79607
24.03.2007, 12:09
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Нам задали по информатике такое задание: сгенерировать все перестановки массива при любом заданном n.
ПОжалуйста, помогите сделать лабораторную!....:) SOS:)
Может быть на каком нибудь сайте омжно все это скачать?...в готовом виде....
Спасибо ВСЕМ!!!!
С уважением, Галя.

Обсуждение

Неизвестный
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.
Форма ответа