此题参考与其他人思路, 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个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...相关推荐

  1. java编程题身高排队_身高排队算法-(较优解):12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...

    本人对解决算法有兴趣,曾在网上看到过一道阿里巴巴的面试题. 题目是这样的:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 所以自己也考虑了一 ...

  2. 【编程题目】12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,...

    80.阿里巴巴一道笔试题(运算.算法) 问题描述: 12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高, 问排列方式有多少种? 我的思路:输入从小到大排列的数字   ...

  3. 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人 高,问排列方式有多少种?

    12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第一排比对应的第二排的人高,问排列方式有多少种? 思想:分析一下排列法,发现:每次安插第二排时,只要等第一排的选完了,再选最小值就行了.而选第 ...

  4. 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少

    分析问题: 显然可知,选人的顺序不影响最终结果数,所以我们对12个人从矮到高排序,编号1-12,依次放入队伍里. 1号肯定放在第0排第0列.假如1号放在任何其他位置,都需要有比他高的人放在0排0列,必 ...

  5. 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

    /** *  */ public static void main(String[] args) { // TODO Auto-generated method stub InLineProblem( ...

  6. 12个高矮不同的人排成两排

    作者:baihacker  来源:http://hi.baidu.com/feixue http://hi.csdn.net/baihacker 问题描述:  12个高矮不同的人,排成两排,每排必须是 ...

  7. 爬山--登上山顶的方式有多少种?

    爬山问题 ---- 昨天做了个华为机试题目,部门是智能运算. 题目:(原题背不了,以下是大概意思.) 一个人要爬上山顶, 需要通过一个阶梯,阶梯的步数为正整数N(N>0 && N ...

  8. 现在手机解锁方式有多少种?例如密码、图形、声纹、面部识别。

    据说,现在手机解锁方式有多少种?例如密码.图形.声纹.面部识别.如果你嫌这些都不够方便的话,摩托的"纹身解锁"或许更适合你.这里说的纹身并不是大家平常理解的那样,而是一款名为&qu ...

  9. 组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种?

    组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种? JavaScript编写 function hm2(){var num=100;var sum=0;var a= ...

最新文章

  1. PHP-----PHP程序设计基础教程----第四章数组
  2. 汽车与智能家居互联时代 语音控制很关键
  3. python代码怎么运行-python代码是怎样运行的
  4. Wireshark EndPoints窗口
  5. 一个合格网络管理员的成长经历
  6. EOS从入门到精通(四)
  7. 腾讯AI Lab正式开源业内最大规模多标签图像数据集
  8. SAP UI5 ABAP repository的handler class
  9. .NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记
  10. 3说明书_怎么才能做好产品说明书翻译?知行翻译公司总结了3点
  11. hdu 1162(最小生成树kruskal)
  12. Input标签牲描述
  13. 如何在苹果设备上查看 Apple Pay 交易?
  14. linux+nginx+tomcat负载均衡,实现session同步
  15. 【单目标优化求解】基于matlab非线性权重的自适应鲸鱼算法求解单目标优化问题(NWAWOA)【含Matlab源码 1665期】
  16. 2021电工杯B题股票预测思路分析程序示例及参考文献
  17. svn图标消失解决办法
  18. Android系统webView下载不动,Android WebView下载无法正常工作
  19. 校OJ P1220 -- zyf的现状
  20. MAC电脑如何用苹果电脑微信版实现多开

热门文章

  1. 请不要在年轻时去云南
  2. CAD无法正常启动[acadiso.dwt加载卡死]解决办法与问题排除思路分享--以CAD2014版本情况为例
  3. 计算机英语incidents,分布式智能视觉监控,Distributed intelligent visual surveillance,音标,读音,翻译,英文例句,英语词典...
  4. 微信拉黑了之后聊天记录还在吗
  5. 安装红帽虚拟服务器步骤,搭建红帽虚拟化平台RHEV——主机host的安装
  6. python爬取网易云音乐热评
  7. 基于dumi和antd封装的易用组件库(每个人都应该有自己的组件库)
  8. android+wear操作系统,智能手表操作系统对比:Tizen与Android Wear
  9. html快速添加物料信息,新增物料信息.html
  10. 网贷之家发布《11月全国P2P平台“百强榜”》