输入种数n,输出从中取m个不同种的所有组合(cnm):
#include<iostream>
#include<vector>
using namespace std;
vector<int> v;
vector<int> tv; //(也可以开一个不大于题面给的m最大值的数组)用于暂时存放每种可能而被反复使用的 vector
int sum=0;
函数部分:
void sumOf(int n,int m)
{ for(int i=n-1;i>=m-1;--i) //注意一下:单次for循环中的n和m都是不变的 { if(m==1) //如果此次for循环中的m==1就终止此次递归,在当前递归中循环执行if中的内容 { tv[m-1]=v[i]; for(auto it=tv.begin();it!=tv.end();++it) { cout<<*it<<" "; } cout<<endl; ++sum; } else //若此次for循环中m-1>0,就每将该元素固定后进行下一元素的判断 { tv[m-1]=v[i]; sumOf(i,m-1); //当前循环已经是i=n-1了,但注意此处不能用n-1 } }}
主函数:
int main()
{ int n,m; cin>>n>>m; tv.resize(m); for(int i=0;i<n;++i) { int num; cin>>num; v.push_back(num); } sumOf(n,m); cout<<sum<<endl;}