Problem1039--§2 5 【例5.2】组合的输出

1039: §2 5 【例5.2】组合的输出

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

Description

排列与组合是常用的数学方法,其中组合就是从 $n$ 个元素中抽出 $r$ 个元素(不分顺序且 $r≤n$),我们可以简单地将 $n$ 个元素理解为自然数 $\{1,2,…,n\}$,从中任取 $r$ 个数。
现要求你用递归的方法输出所有组合。
例如 $n=5,\ r=3$,所有组合为:
[1 2 3]   [1 2 4]   [1 2 5]   [1 3 4]   [1 3 5]   [1 4 5]   [2 3 4]   [2 3 5]   [2 4 5]   [3 4 5]

Input

一行两个自然数 $n,\ r\ (1<n<21,\ 1≤r≤n)$。

Output

所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

Sample 1 Input

5 3

Sample 1 Output

  1  2  3
  1  2  4
  1  2  5
  1  3  4
  1  3  5
  1  4  5
  2  3  4
  2  3  5
  2  4  5
  3  4  5

HINT

位宽控制,流式输出请使用 c++ 函数:
cout<<setw(3)

Source/Category

基础算法 4.12.搜索与回溯