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的情况
![](http://hi.csdn.net/attachment/201105/14/0_130536558644fu.gif)
(2) sum > n的情况
![](http://hi.csdn.net/attachment/201105/14/0_1305365819Gp2r.gif)
(3) sum = n的情况
编程求解:
输入两个整数 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的情况
![](http://hi.csdn.net/attachment/201105/14/0_130536558644fu.gif)
(2) sum > n的情况
![](http://hi.csdn.net/attachment/201105/14/0_1305365819Gp2r.gif)
(3) sum = n的情况
![](http://hi.csdn.net/attachment/201105/14/0_13053658260ffM.gif)
相关文章推荐
- 水池问题的lua语言算法(面试题分析:我的Twitter技术面试失败了)
- 算法导论三剑客之 动态规划 01背包问题
- 2010年中兴面试题
- 【算法题】01背包问题
- 2010年中兴面试题
- 2010年中兴面试题
- 21、2010年中兴面试题
- 算法基础-动态规划 (1) 01背包问题
- 遗传算法解01背包问题(Java)
- 算法与数据结构面试题(7)-链表“香蕉”问题
- 回溯算法---01背包问题
- 【算法面试题】:小明过桥问题
- 大数据面试题求解:给定n个实数 ,求着n个实数在实轴上向量2个数之间的最大差值,要求线性的时间算法(最大间隙问题)
- 算法实践——Twitter算法面试题(积水问题)的线性时间解法
- 【算法】01背包问题的Java实现
- 算法面试---01背包问题---动态规划
- JS面试题---关于算法台阶的问题
- 算法进阶之动态规划-01背包问题
- 【01背包问题】:动态规划、回溯法和分支限界法 三种算法的对比与分析(时间复杂度方面)
- 回溯算法-01背包问题