题目大意:
从 n 个元素中抽出 r 个元素(不分顺序且 r≤n)
现要求你输出所有组合。
例如 n=5,r=3n=5,r=3,所有组合为:
123,124,125,134,135,145,234,235,245,345123,124,125,134,135,145,234,235,245,345。
注意哦!输出时,每个数字需要 33 个场宽。以 C++ 为例,你可以使用下列代码:cout << setw(3) << x;
分析:
1 题目说了是从 n 个元素中抽出 r 个元素(不分顺序且 r≤n)所以搜索时定义两个变量:f(当前选了多少个数)
l(第f个数是的数)
2 如果选完了就输出
3 如果要选就f+1;把l用数存起来if(l<=n){ a[f+1]=l; ch(f+1,l+1); ch(f,l+1); }
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[25];
void ch(int f,int l){
if(f==m){
for(int i=1;i<=m;i++){
cout<<setw(3)<<a[i];
}
cout<<endl;
return ;
}
if(l<=n){
a[f+1]=l;
ch(f+1,l+1);
ch(f,l+1);
}
return ;
}
int main(){
cin>>n>>m;
ch(0,1);
return 0;
}