题目:
编程求解:
输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来。
程序:
#include <list>
#include <iostream>
using namespace std;
void qiujie(int sum,int n)
{
static list<int> ilist;
if (sum < 1 || n < 1)
return;
if (sum > n)
{
F_LOOP:
ilist.push_front(n);
qiujie(sum-n,n-1);
ilist.pop_front();
qiujie(sum,n-1);
}else{
for(list<int>::reverse_iterator it = ilist.rbegin();it != ilist.rend();it++)
cout<<*it<<" + ";
cout<<sum;
cout<<endl;
while( (--n) >0)
{
if (sum > n)
goto F_LOOP;
}
}
}
int main()
{
int sum,n;
cout<<"请输入你要等于多少的数据sum:"<<endl;
cin>>sum;
cout<<"请输入你要从1......n数列中取值的n:"<<endl;
cin>>n;
cout<<"生成所有的排序序列: "<<endl;
qiujie(sum,n);
return 0;
}
运行结果:
(1) sum < n的情况
(2) sum > n的情况
(3) sum = n的情况