pascal 有重复出现的全排列

来源:百度知道 编辑:UC知道 时间:2024/06/26 06:25:10
如题
例子:
输入4
1 1 1 6
输出:1 1 1 6
1 6 1 1
1 1 6 1
6 1 1 1
...
是数字排序
3楼的 做错了
2楼的 你搞错了把。。。。。
懂不懂全排列啊

m全排列的第n种
program dsa;
var a:array[1..20]of longint;
i,j:longint;
bb,n,k:int64;
m:qword;
begin
readln(n,m);
bb:=1;
for i:=2 to n-1 do bb:=bb*i;
for i:=1 to n do a[i]:=i;
i:=1;
if m=1 then
begin
for j:=1 to n do write(a[j],' ');
exit;
end;
while i<=n do
begin
if m=1 then
begin
for j:=1 to n-i+1 do write(a[j],' ');
break;
end;
if m=1 then break;
k:=1;
while m-bb>0 do
begin
m:=m-bb;
inc(k);
end;
write(a[k],' ');
for j:=k to n-1 do a[j]:=a[j+1];
bb:=bb div (n-i);
inc(i);
end;
end.

输出不是字典序吗?
请问要求的输出顺序是什么?
还有,数据范围的限制?

为什么输出的是
1 1 1 6
1 6 1 1
1 1 6 1
6 1 1 1
不是
1 1 1 6
1 1 6 1
1 6 1 1
6 1 1 1

而且数据范围是多少?