java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...
此题参考与其他人思路, 2个解题方式。
1.
1 /** 2 * 用java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 3 * 状态树方式解 4 * 用状态生成树的方式来做的,先把12个人按从低到高一次编号, 5 * 从(1 ; 2)出发,加入3和4的时候生成(1,3 ; 2,4)和(1,2 ; 3,4), 6 * 然后加入5和6,分别从前面的两个状态出发,可以生成5种状态,就是说6个人时有5种排列 7 * @author amos-s 8 * @Time:2017年3月10日 下午6:18:37 9 * @version 1.0 10 */ 11 public class LineUpProblem { 12 13 private int count = 0; 14 private int total = 0; 15 private Stack<Integer> place = new Stack<Integer>(); 16 17 public LineUpProblem(int total) { 18 this.total = total; 19 } 20 21 private void lineOrder(int order, int level) { 22 place.push(order); 23 if (level >= total / 2) { 24 count++; 25 for (Integer integer : place) { 26 System.out.print(integer); 27 } 28 System.out.println(); 29 place.pop(); 30 return; 31 } 32 33 for (int i = order + 1; i < 2 * (level + 1); ++i) { 34 lineOrder(i, level); 35 } 36 place.pop(); 37 } 38 39 40 public void lineOrder() { 41 lineOrder(1, 1); 42 System.out.println("第一排一共有" + count + "种排列"); 43 } 44 45 public static void main(String[] args) { 46 LineUpProblem line = new LineUpProblem(12); 47 line.lineOrder(); 48 } 49 }
2.
1 /** 2 * 用java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 3 * 1.目前数是{0,1,2,3,4,5}, ++操作后,数变为{0,1,2,3,4,6},因为6小于且等于位置5的最大值2n = 10,所以此组合是个符合要求的组合。 4 5 * 2.又如目前数是{0,1,2,3,4,10}, ++操作后,数变为{0,1,2,3,4,11},因为11大于位置5的最大值2n = 10, 6 因此要进位,这样位置4的数++,再检查位置4的数++后是5,小于且等于位置4的最大值2n = 8,这个位置符合条件, 7 而位置5的数要置"0",这个0不能是再从范围的起始值开始,而是要等于位置4的数+1.因为从起始值开始的数肯定是小于位置4的值的。 8 9 * 3.以此类推,如果目前数是{0,1,4,6,8,10},++操作后,需要进位,一步一步往前进位,最终进位位置1的数,数就变成了{0,2,5,7,9,11}, 10 然后要把位置1之后位置的每个位置的数置"0", 等于前一个位置的数+1,这样最后数就是{0,2,3,4,5,6}. 11 12 * 4.检查此数组合是否符合条件是,检查最后一个数是否小于且等于其位置的最大值。 13 * 14 * @author amos-s 15 * @Time:2017年3月10日 下午6:18:37 16 * @version 1.0 17 */ 18 public class LineUpProblem2 { 19 20 private int count = 0; 21 private int total = 0; 22 23 public LineUpProblem2(int total) { 24 this.total = total; 25 } 26 27 private void lineOrder() { 28 //No.1 29 //开始写代码,求排列方式有多少种 30 if (total % 2 != 0) 31 return; 32 //初始化数组,并完成第一种排列 33 int[] data = new int[total / 2]; 34 for (int i = 1; i < data.length; ++i) { 35 data[i] = i; 36 } 37 count++; 38 //保存操作数组的位置 39 int i = data.length - 1; 40 int allCount = 0; 41 while (i >= 0) { 42 43 data[i]++; //要操作的数+1 44 if (data[i] <= i * 2) { 45 //对其数后面的数字初始化 46 for (int j = i + 1; j < data.length; ++j) { 47 data[j] = data[j - 1] + 1; //保证其是前一位+1,最小数组合 48 } 49 } else { 50 //此位置已达最大值,操作其前面一位 51 i--; 52 continue; 53 } 54 //检查最后一位的数是否小于且等于其位置的最大值,如果是的话,此数组合符合要求 55 System.out.println(data[data.length - 1]); 56 if (data[data.length - 1] <= data[data.length - 1] * 2) { 57 count++; //排列方式+1 58 // 把++操作的数的位置置回最后一个位置。 59 i = data.length - 1; 60 } else { 61 // 如果大于其位置的最大值,说明已遍历完毕,超过了此数组合的最大值。 62 break; 63 } 64 65 } 66 67 68 //end_code 69 } 70 71 public void lineOrder() { 72 lineOrder(); 73 System.out.println("第一排一共有" + count + "种排列"); 74 } 75 76 public static void main(String[] args) { 77 LineUpProblem2 line = new LineUpProblem2(12); 78 line.lineOrder(); 79 } 80 }
转载于:https://www.cnblogs.com/amos-s/p/6536406.html
java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...相关推荐
- java编程题身高排队_身高排队算法-(较优解):12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...
本人对解决算法有兴趣,曾在网上看到过一道阿里巴巴的面试题. 题目是这样的:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 所以自己也考虑了一 ...
- 【编程题目】12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,...
80.阿里巴巴一道笔试题(运算.算法) 问题描述: 12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高, 问排列方式有多少种? 我的思路:输入从小到大排列的数字 ...
- 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人 高,问排列方式有多少种?
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第一排比对应的第二排的人高,问排列方式有多少种? 思想:分析一下排列法,发现:每次安插第二排时,只要等第一排的选完了,再选最小值就行了.而选第 ...
- 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少
分析问题: 显然可知,选人的顺序不影响最终结果数,所以我们对12个人从矮到高排序,编号1-12,依次放入队伍里. 1号肯定放在第0排第0列.假如1号放在任何其他位置,都需要有比他高的人放在0排0列,必 ...
- 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
/** * */ public static void main(String[] args) { // TODO Auto-generated method stub InLineProblem( ...
- 12个高矮不同的人排成两排
作者:baihacker 来源:http://hi.baidu.com/feixue http://hi.csdn.net/baihacker 问题描述: 12个高矮不同的人,排成两排,每排必须是 ...
- 爬山--登上山顶的方式有多少种?
爬山问题 ---- 昨天做了个华为机试题目,部门是智能运算. 题目:(原题背不了,以下是大概意思.) 一个人要爬上山顶, 需要通过一个阶梯,阶梯的步数为正整数N(N>0 && N ...
- 现在手机解锁方式有多少种?例如密码、图形、声纹、面部识别。
据说,现在手机解锁方式有多少种?例如密码.图形.声纹.面部识别.如果你嫌这些都不够方便的话,摩托的"纹身解锁"或许更适合你.这里说的纹身并不是大家平常理解的那样,而是一款名为&qu ...
- 组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种?
组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种? JavaScript编写 function hm2(){var num=100;var sum=0;var a= ...
最新文章
- PHP-----PHP程序设计基础教程----第四章数组
- 汽车与智能家居互联时代 语音控制很关键
- python代码怎么运行-python代码是怎样运行的
- Wireshark EndPoints窗口
- 一个合格网络管理员的成长经历
- EOS从入门到精通(四)
- 腾讯AI Lab正式开源业内最大规模多标签图像数据集
- SAP UI5 ABAP repository的handler class
- .NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记
- 3说明书_怎么才能做好产品说明书翻译?知行翻译公司总结了3点
- hdu 1162(最小生成树kruskal)
- Input标签牲描述
- 如何在苹果设备上查看 Apple Pay 交易?
- linux+nginx+tomcat负载均衡,实现session同步
- 【单目标优化求解】基于matlab非线性权重的自适应鲸鱼算法求解单目标优化问题(NWAWOA)【含Matlab源码 1665期】
- 2021电工杯B题股票预测思路分析程序示例及参考文献
- svn图标消失解决办法
- Android系统webView下载不动,Android WebView下载无法正常工作
- 校OJ P1220 -- zyf的现状
- MAC电脑如何用苹果电脑微信版实现多开
热门文章
- 请不要在年轻时去云南
- CAD无法正常启动[acadiso.dwt加载卡死]解决办法与问题排除思路分享--以CAD2014版本情况为例
- 计算机英语incidents,分布式智能视觉监控,Distributed intelligent visual surveillance,音标,读音,翻译,英文例句,英语词典...
- 微信拉黑了之后聊天记录还在吗
- 安装红帽虚拟服务器步骤,搭建红帽虚拟化平台RHEV——主机host的安装
- python爬取网易云音乐热评
- 基于dumi和antd封装的易用组件库(每个人都应该有自己的组件库)
- android+wear操作系统,智能手表操作系统对比:Tizen与Android Wear
- html快速添加物料信息,新增物料信息.html
- 网贷之家发布《11月全国P2P平台“百强榜”》