题目描述
排列与组合是常用的数学方法,桐桐刚刚学会了全排列,就想试试组合,组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。
输入
两个整数n和r(1≤r≤n≤20)。
输出
输出所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
样例输入
5 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
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,r,a[100],p[100],vis[100]; 4 void dfs(int k) 5 { 6 if(k==r) 7 { 8 for(int i=0;i<k;i++) 9 { 10 11 cout<<setw(3)<<p[i]; 12 } 13 cout<<endl; 14 return ; 15 } 16 for(int i=0;i<n;i++) 17 { 18 if(!vis[i]&&a[i]>p[k-1]) 19 { 20 vis[i]=1; 21 p[k]=a[i]; 22 dfs(k+1); 23 vis[i]=0; 24 } 25 } 26 27 } 28 int main() 29 { 30 cin>>n>>r; 31 for(int i=0;i<n;i++) 32 a[i]=i+1; 33 dfs(0); 34 // cout<<cnt<<endl; 35 return 0; 36 }