您的位置:首页 > 职场人生

2010年中兴面试题 01背包问题算法

2011-05-14 16:42 295 查看
题目:

编程求解:
输入两个整数 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的情况

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: