算法思想:
对于一组数1,2,3…n
如果要取出m个数作为一组,求每组的组合数。则可以按如下方法:
- 先取第一个数,则有n种取法,用循环实现。比如先取1,然后递归到下一层
- 取第二个数的时候,只有n-1种取法,用循环实现。比如可以取2,然后递归到下一层
- 取第三个数的时候,只有n-2种取法,用循环实现。比如可以取3,然后递归到下一层
当取够m个数的时候,就是一种组合,可以输出。
/*组合本例是从5个数里面找出n(1<=n<=5)个数组成一组*/#include#include#includeusing namespace std;int n;vector<int> a={1,2,3,4,5};void print(int *b){vector<int> c;for(int i=0; i<a.size(); i++){if(b[i]!=0)https://www.3tt.net/?mod=artinfo&aid=577c.push_back(b[i]);}if(c.size()<n)return;for(auto i:c){cout<<i<<" ";}cout<<endl;}void combination(int k, int *b){if(k==n){print(b);return;}int len = a.size();for(int i=k; i<len; i++){b[i]=a[i];combination(k+1, b);b[i]=0;}}int main(int argc, char const *argv[]){int b[100]={0};cout<<"输入要取出的个数(最大为5):";cin>>n;combination(0, b);return 0;}