阿里巴巴笔试题_身高排队问题
Posted on阿里巴巴笔试题_身高排队问题
阿里巴巴笔试题_身高排队问题
浏览 248 次 主题:阿里巴巴笔试题_身高排队问题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0) 作者 正文 * thinke365
- 趣味编程:24点算法实现
- 2006百度之星程序设计大赛试题-变态比赛规则(解答)
- 来来来,有兴趣的人便来战这算法题吧:
推荐圈子: Pipboy
更多相关推荐 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
假定这12个人各自有自己的编号,即1、2、3... 11、12. 并且编号1到编号12所代表的人身高是递增的。
解这道题基于观察发现的如下规律:
a、第一排第一个人必定是1.
b、第一排第二个位置的可选值是2、3,第一排第三个位置的可选值是3、4、5,...,第一排第6个人的可选值是6、7、8、9、10、11
c、第一排的数字确定后,第二排的顺序可以唯一确定。因为剩下的6个数字只能递增排列(显然只有一种结果),所以只需确定第一排的所有排列可能就行了。 如下是解题的最初实现方法。采用穷举法实现。
/#include
using namespace std; /#include /#include // 后来发现不需要记录路径中现有节点。因为数字本身存在偏序的问题,往上涨就行了 set path; vector > marks; int getCount(int depth, int max) { if(depth==marks.size()) { int flag=0; for(int i=0; i max) { flag ++; } } return flag; } int count = 0; for(int i=0;i max) { count += getCount(depth+1,marks[depth-1][i]); } } return count; } int main() { int n; while(cin>>n) { marks.clear(); for(int i=1; i<=n/2; i++) { vector node; for(int j=0;j<i;j++) { node.push_back(i+j); } marks.push_back(node); } cout << getCount(1, 0) << endl; } return 0; } 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
论坛首页 → 招聘求职版 → 求职经验 跳转论坛:Java编程和Java企业应用 Web前端技术:AJAX和RIA 移动编程和手机应用开发 C/C++编程 Ruby编程 Python编程 PHP编程 Flash编程 Microsoft .Net 综合技术 软件开发和项目管理 行业应用 入门讨论 招聘求职 海阔天空
- 首页
- 新闻
- 论坛
- 问答
- 知识库
- 博客
- 圈子
- 招聘
- 服务
- 搜索
- Java
- Web
- Ruby
- Python
- 敏捷
- MySQL
- 普元
- Dorado
- 金蝶中间件
- 图书
- 广告服务
- JavaEye黑板报
- 关于我们
- 联系我们
- 友情链接
© 2003-2009 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ]