不是VIP会员,不能显示答案

题目解答

题目:
输入一个正整数 n(2 <= n <= 10^6),以及 n 个不同的正整数(范围在1<=a[i]<=n)。这个数可以理解为n的一种排列,假设 (1 , 2 , 3, 4,……,n)是第1个排列,( n, n-1, ......, 1)是最后一个排列,根据这n个数组成的排列,输出下一个排列,每一个数后输出一个空格;若这n个数已经是最一个排列,输出“No Next Permutation”。
输入:5
1 2 5 4 3
输出:
1 3 2 4 5

var
  n,num,i,mid,t:longint; 
  a,b:array[1..1000000] of longint; 
  begin 
  readln(n);
  for i:=1 to n do read(a[i]);
  num:=0;
  i:=n;
  while i>1 do
  begin
    if a[i]<a[i-1] then
    begin
      inc(num); b[num]:=a[i];
    end
    else
    begin
      inc(num); b[num]:=a[i];
      inc(num);  b[num]:=a[i-1];
      mid:=i-2;
      break;
    end;
    dec(i)
  end;
  if i=1 then writeln('No Next Permutation')
  else
  begin
    for i:=1 to num-1 do
      if  b[i]>b[num] then
        begin
          t:=b[i];b[i]:=b[num];b[num]:=t;
          break;
        end;
    for i:=1 to mid do write(a[i],' ');
    write(b[num],' ');
    for i:=1 to num-1 do write(b[i],' ') ;
    writeln;
  end;
end.
考点:
分析:
解答:
评论:
老师: