不知道你想要什么语言的。此题非常类似noip普及组2004的最后一题(没记错的话应该是最后一题)“火星人”。你可以上vijos看一看此题:https://www.vijos.org/p/1115。
对于你的题目,我的free pascal代码如下:
var n,m,i,j,p,temp:integer;
a:array[1..10005]of integer;
BEGIN
readln(n);
for i:=1 to n do a[i]:=i;
for i:=1 to n-1 do write(a[i],' ');
writeln(a[n]);
while (0=0)do begin
p:=n;
while (a[p-1]>a[p])and(p>1)do dec(p);
if p>1 then dec(p)
else break;
for j:=n downto p+1 do
if a[j]>a[p]then break;
temp:=a[p]; a[p]:=a[j]; a[j]:=temp;
for j:=p+1 to(n+p)div 2 do begin
temp:=a[j]; a[j]:=a[p+n-j+1]; a[p+n-j+1]:=temp;
end;//for
for i:=1 to n-1 do write(a[i],' ');
writeln(a[n]);
end;//for
END.
不过有个问题,就是当n=10的时候,实在是过不了,就算只有输出都会超时的……最多只能到9.