输入:3 2
输出:1 2
1 3
2 1
2 3
3 1
3 2
const SIZE:=25; var used : array[1..SIZE] of boolean; data : array[1..SIZE] or 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 + 1 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