首页 > 试题广场 >

(排列数)输入两个正整数 n, m (1 ≤ n ≤ 20,

[填空题]
(排列数)输入两个正整数 n, m (1 ≤ n ≤ 20, 1 ≤ m ≤ n),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列。例如:
输入:3 2
输出:1 2 1 3 2 1 2 3 3 1 3 2
const
  SIZE = 20;
var
  used : array [1..SIZE] of boolean;
  data : array [1..SIZE] of integer;
  n, m, i, j, k : integer;
  flag : boolean;
begin
  readln(n, m);
  fillchar(used, sizeof(used), false);
  for i:=1 to m do
  begin
    data[i] := i;
    used[i] := true;
  end;
  flag := true;
  while flag do
  begin
    for i:=1 to m - 1 do write(data[i], ' ');
    writeln(data[m]);
    flag := 1;
    for i := m downto 1 do
    begin
      2;
      for j := data[i] + 1 to n do if used[j] = false then
      begin
        used[j] := true;
        data[i] := 3;
        flag := true;
        break;
      end;
      if flag then
      begin
        for k:= i + l to m do
          for j:= 1 to    4   do if used[j] = false then
          begin
            data[k] := j;
            used[j] := true;
            break;
          end;
        5;
      end;
    end;
  end;
end.

这道题你会答吗?花几分钟告诉大家答案吧!