输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
分为两种情况:包含n和不包含n
#include <iostream>
#include <list>
using namespace std;
list<int > listvec;
void find (int sum,int n)
{
if (sum ==0)
{
for (list <int>:: iterator iter=listvec .begin(); iter!=listvec .end(); iter++)
{
cout<<*iter <<"+";
}
cout<<endl ;
return;
}
if (n==0)
return;
if (sum >=n) //第一种情况m>n,包含n
{
listvec.push_back (n);
find(sum-n,n-1);
listvec.pop_back ();
}
find(sum,n-1);// 第二种n没有放进去,不包含n
}
int main ()
{
int sum,n;
cout<< "please input m=:"<<endl ;
cin>> sum;
cout<< "please input n=:"<<endl ;
cin>> n;
find( sum,n);
system( "pause");
return 0;
}