2010年中兴面试题
2016-03-22 19:14
211 查看
输入两个整数n和m,从数列1、2、3…….n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来。
Answer:第一眼反应就是DFS,其中需要考虑的问题是去除重复的组合,其他没什么难度,简单的DFS
Answer:第一眼反应就是DFS,其中需要考虑的问题是去除重复的组合,其他没什么难度,简单的DFS
#include <iostream> #include <stdio.h> #include <algorithm> #include <string> #include <cstring> #include <string.h> using namespace std; #define M 10000 int flag[M]; //标记已经使用的数 int num[M]; //存1~N int m,n; void show() //输出 { for(int i = 1; i <= n; i++) { if(flag[i]) printf("%d ",num[i]); } printf("\n"); } void DFS(int po) { if(m == 0) //当m等于0,说明已经找到一个组合 { show(); } if(m < 0) return; for(int i = po; i <= n; i++) { if(!flag[i]) //只有没被用过的数才能被加入到组合中 { m -= num[i]; flag[i] = 1; DFS(i+1); //去除重复的组合 m += num[i]; flag[i] = 0; } } } int main() { scanf("%d%d",&n,&m); memset(num,0,sizeof(num)); memset(flag,0,sizeof(flag)); for(int i = 1; i <= n; i++) num[i] = i; DFS(1); return 0; }
相关文章推荐
- 面试题_抽象工厂,字符反串,冒泡与选择排序
- 133个Java面试问题列表
- 程序员跳槽的最佳时机选择
- 程序员的那些门槛!
- 排序01无序数组
- 推荐!国外程序员整理的Java资源大全
- 给未来程序员的15个顶级职业建议
- 搜狐面试题:有12个球,外形都一样,其中有一个质量和其他的不一样,给你一架天平,请问最少称几次可以把那个不同的球找出来。
- 最适合程序员转行的10大职业
- 给新人的iOS面试资料(2016年3月6日更新)
- [转载]一天只工作 3 小时的程序员,已坚持两年
- 记CVTE2016年春招&暑期实习生招聘应聘经历
- Java研发工程师面试题
- cvte——android面试必懂
- 3-14CVTE—android工程师面试前准备
- 彪悍的职业不惧阿尔法狗
- IntelliJ下使用Code/Live Template加快编码速度:程序员的工作不是写程序,而是写程序解决问题
- 40个Java集合面试问题和答案
- Java程序员不该有的6种陋习
- Google Careers 程序员必修课