12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少
分析问题:
显然可知,选人的顺序不影响最终结果数,所以我们对12个人从矮到高排序,编号1-12,依次放入队伍里。
1号肯定放在第0排第0列。假如1号放在任何其他位置,都需要有比他高的人放在0排0列,必定违反约束。
假设已经放置好i-1号,开始放置第i号。i号必须紧靠左放置,无论被放在0排还是1排。假如i号有跳过空位置,则必须有比i大的号填充i号左侧的位置,必定违反约束。
当0排已放置个数和1排已放置个数相等时,则i号必须放在0排。假如i号在此情况下放在1排,则i号对应的0排位置,只能放置比i号大的数,必定违反约束。
因此,程序设置k0和k1来记录当前0排和1排的放置个数,resolution记录满足要求的排列方式个数。当要放置12号,并且第1排第5列空着时,则表示达到一种排列方式,resolution加1。
采用递归进行查找,当process方法递回返回时,需要清除相应的数组空位,并相应减小k0和k1.
#include<stdlib.h>
#include<stdio.h>int arr[2][6];//2行6列数组,代表两个队列
int resolution = 0;//答案个数
int k0 = 0, k1 = 0;//各行已填充个数
/*
arr:数组
*/
void process(int curnum){if(curnum == 12){if(arr[1][5] == 0){resolution++;}return ;}//如果0行填充个数与1行填充个数相等,则当前数填充0行if(k0 == k1){arr[0][k0] = curnum;k0++;process(curnum+1);arr[0][k0] = 0;k0--;return;}//第0行最多填充到6个if(k0 < 6){arr[0][k0] = curnum;k0++;process(curnum+1);arr[0][k0] = 0;k0--;}arr[1][k1] = curnum;k1++;process(curnum+1);arr[1][k1] = 0;k1--;}
int main(){int* pr = &resolution;//初始化数组int i,j;for(i = 0; i < 2; i++){for(j = 0; j < 6; j++){arr[i][j] = 0;}} arr[0][0] = 1;k0=1;process(2);arr[0][0] = 0;printf("%d",resolution);return 0;
}
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少相关推荐
- 【编程题目】12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,...
80.阿里巴巴一道笔试题(运算.算法) 问题描述: 12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高, 问排列方式有多少种? 我的思路:输入从小到大排列的数字 ...
- java编程题身高排队_身高排队算法-(较优解):12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...
本人对解决算法有兴趣,曾在网上看到过一道阿里巴巴的面试题. 题目是这样的:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 所以自己也考虑了一 ...
- java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?...
此题参考与其他人思路, 2个解题方式. 1. 1 /** 2 * 用java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 3 * ...
- 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人 高,问排列方式有多少种?
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第一排比对应的第二排的人高,问排列方式有多少种? 思想:分析一下排列法,发现:每次安插第二排时,只要等第一排的选完了,再选最小值就行了.而选第 ...
- 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个高矮不同的人,排成两排,每排必须是 ...
- 现在手机解锁方式有多少种?例如密码、图形、声纹、面部识别。
据说,现在手机解锁方式有多少种?例如密码.图形.声纹.面部识别.如果你嫌这些都不够方便的话,摩托的"纹身解锁"或许更适合你.这里说的纹身并不是大家平常理解的那样,而是一款名为&qu ...
- 爬山--登上山顶的方式有多少种?
爬山问题 ---- 昨天做了个华为机试题目,部门是智能运算. 题目:(原题背不了,以下是大概意思.) 一个人要爬上山顶, 需要通过一个阶梯,阶梯的步数为正整数N(N>0 && N ...
- 组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种?
组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种? JavaScript编写 function hm2(){var num=100;var sum=0;var a= ...
最新文章
- 基于VMware vSphere 5.0的服务器虚拟化实践(9)
- Qt Creator连接裸机设备
- 【转】linux下安装ssh服务器端及ssh的安全配置
- 服务器与HTML客户端通信,服务器与HTML客户端通信
- Leetcode每日一题:129.sum-root-to-leaf-numbers(求根到叶子节点数字之和)
- jeecms升级shiro漏洞报错处理
- CCF201612试题
- 简述java内存模型
- 虹科和ELPRO推出符合GxP标准的自助式温度分布验证套装
- Ubuntu配置maven环境变量
- gis如何加入emf图片_ArcGIS教程:地图导出格式,教你如何选择
- 电脑系统相关问题收录(windows10)
- 霍尔 磁电 光电式传感器的比较 实验思考题
- git push failed to push some refs to xxxx 失败与解决方法
- 编译原理:了解编译原理
- android特效拍照,创意随我 Android手机特效拍照软件评
- Uber及Cruise开发自驾车可视化工具名为Worldview的React函式库
- 计算机毕业设计JAVA工资管理系统mybatis+源码+调试部署+系统+数据库+lw
- 国内大神开源 Kafka 监控系统Eagle 使用教程
- .NET Reflector Crack,用于探索和导航反编译代码
热门文章
- N型连接器市场现状及未来发展趋势分析
- 两化融合企业申报奖励制度
- c语言中strcmp的意思,c语言中strcmp是什么意思
- 上海浦东文华东方酒店携小猪佩奇玩趣世界打造一站式亲子旅居攻略
- java 齿轮_(7-8)下面说法正确的是 ( ) 。_学小易找答案
- Excel如何批量在批注后面添加指定文本
- wifi四种省电模式的控制
- 《计算之魂》--- 思考题0.3 【读书笔记】
- No.017 <软考>《(高项)备考大全》【第02章】信息系统项目管理基础
- 计算机学业水平考试反思总结8百,关于考试成绩反思精选1000字检讨书