回 帖 发 新 帖 刷新版面

主题:pascal全排列问题,谢谢,答对者50分

输出从一到n,这n个数字的全排列,谢谢

回复列表 (共4个回复)

沙发

Program quanpailie;
var n,i;integer;
begin
readln(n);
for i:=1 to n do
write(i:5);
end.

板凳

program p;
type arr1=array[1..100] of integer;
var n:integer; a:arr1; i,j,f:integer; nn:longint;
begin
 read (n);
 i:=1;
 while i>0  do begin
  a[i]:=a[i]+1;
  if a[i]>n then begin
   a[i]:=0;
   i:=i-1;
  end else begin
   f:=1;
   for j:=1 to i-1 do begin
    if a[j]=a[i] then begin
     f:=0;
     break;
    end;
   end;
   if f=1 then begin
    if i=n then begin
     for j:=1 to n do begin
      write (a[j]);
     end;
     writeln;
     nn:=nn+1;
    end else begin
     i:=i+1;
    end;
   end;
  end;
 end;
 writeln (nn);
end.
全排列的所有结果都会输出
如:
输入3
输出
123
132
213
231
312
321
6           '共有六种

3 楼

label 10;
var n,i,j,s,k:longint;
a:array[1..10000] of longint;
procedure hxy(i:longint);
begin
for j:=i to n do
a[i]:=j;
for k:=1 to i-1 do
if a[i]=a[j] then goto 10;
if i<n then begin
hxy(i+1);
end
else begin
s:=s+1;
for j:=1 to n do
write(a[j],' ');
writeln;
end;
10:end;
begin
readln(n);
hxy(1);
writeln(s);
end.

4 楼

用递归,很快

我来回复

您尚未登录,请登录后再回复。点此登录或注册