中兴公司面试题:输入两个整数n和m,从数列1,2.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来。
#include<iostream>
#include <vector>
using namespace std;
void computer(int n,int m,vector<int>&path,int i,int current_sum)
{
//递归结束条件。
if (current_sum>m)
{
return ;
}
//输出结果条件。
if (current_sum==m)
{
vector<int>::iterator it;
for (it=path.begin();it!=path.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
else
{
//从第i个数开始逐次到n每个数字两种情况要么选择要么不选。
for (;i<=n;i++)
{
current_sum+=i;
path.push_back(i);
computer(n,m,path,i+1,current_sum);
current_sum-=i;
path.pop_back();
}
}
}
int main()
{
//测试代码。
vector<int>path;
computer(10,11,path,1,0);
}