100层高的大楼,丢玻璃球的问题
无意间看到这个题目,想了很久才想通(IQ偏低),而且网上很多文章的描述得不是很清楚,在此分享一下个人看法,随便记录一下,如有不对的对方,欢迎指正,谢谢!
问题:有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?
1、在这里我们先忽略最优策略的解决方案
(1)最简单的办法就是从底层(1L)逐层往上(100L)尝试,最多要99次才能确定破碎楼层(即100L破碎)。
(2)针对(1)的方案改进一下,第一个球用折半尝试,第二个球用逐层尝试,最多要50次才能确定破碎楼层(即50L破碎)。
(3)考虑对100L层楼分成N段(N=100的平方根,即10段、每段10L),用第一个球来确认球在哪个段破碎,然后用第二个球在该楼层段逐层尝试,最多要19次才能确定破碎楼层(N+9)
2、最优策略的解决方案
为了使最坏情况的投掷数最小,我们希望无论临界段在哪里,总的投掷数都不变,也就是说投掷数均匀分布。
这里可以看成是针对(3)的优化方案。
第一步:确定临界段(初步确认破碎楼层范围)
第二步:确定临界层(逐层尝试破碎楼层)
描述:为了使投掷数均匀分布(假设最多投掷N次),所以
临界段标号 | 1 | 2 | 3 | ... | i |
临界层层数L | N | N-1 | N-2 | ... | N-i+1 |
临界段范围D | 1~N | D1 + 1 ~ D1 + L2 | D2 + 1 ~ D2 + L3 | ... | Di-1 + 1 ~ Di-1 + Li |
最多投掷次数 | N | N | N | N | N |
由于N取值范围(1~N),所以
当N等于1时,确认临界段最多需要C1次(即1次);
当N等于2时,确认临界段最多需要C2次(即2次);
......
当N等于N-1时,确认临界段最多需要Cn-1次(即N-1次);
当N等于N时,确认临界段最多需要Cn次(即N次);
所以
C1+C2+C3+...+Cn >= 100
=> 1+2+3+...+N >= 100
=> N(N+1)/2 >= 100 (因为N是正整数)
=> N >= 14
=> N=14
临界段标号 | 1 | 2 | 3 | ... | i |
临界层层数L | 14 | 13 | 12 | ... | N-i+1 |
临界段范围D | 1~14 | 15~14+13 | 28~27+12 | ... | Di-1 + 1 ~ Di-1 + 1 + Li-1 |
最多投掷次数 | 14 | 14 | 14 | 14 | 14 |
比如39层,玻璃碎了:
用第一个球依次从14层、27层、39层抛下(39层碎了,共3次)
用第二个球依次从28层、29层、30层、31层、32层、33层、34层、35层、36层、37层、38层抛下(因为27层没碎,共11次)
100层高的大楼,丢玻璃球的问题相关推荐
- [腾讯面试题]100层楼丢玻璃球问题
有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?? 解题思路: 假如只有一个球,那很显然,只有一 ...
- 100层楼丢玻璃球问题
http://www.voidcn.com/article/p-cdzbhnxv-gv.html 有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中 ...
- 100层楼和两个玻璃球
有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??? 投掷次数分布不均.按最坏情况估计,这种方法 ...
- 100层楼和两个玻璃球思路解析
有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??? 投掷次数分布不均.按最坏情况估 ...
- 100楼层和两个玻璃球
有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??? 2012年腾讯实习生笔试的时候,有一个智力 ...
- 腾讯大楼抛玻璃球问题
腾讯大楼抛玻璃球问题 问题 腾讯大厦有39层,你手里有两颗一抹一眼的玻璃珠.当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎.大厦有个临界楼层.低于它的楼层,往下扔玻璃珠,玻璃 ...
- 100层楼丢玻璃球问题-----有俩个玻璃球怎么才能用最少次数求出来玻璃球破碎的临界值?
首先,看到这个题目我想许多小伙伴可能跟我第一次看到这个题目一样都是去想到了二分法去解决这个问题,不过那个想法肯定是错误的.** 思路: 我们从n层楼扔下,如果小球刚好破了那么我们就要从1层开始扔,假设 ...
- 经典算法题:丢棋子问题或者丢玻璃球问题
问题描述 一座大楼有 n+1 层,地面算作第0层,最高的一层为第 n 层.已知棋子从第0层掉落肯定不会摔碎,从第 i 层掉落可能会摔碎,也可能不会摔碎. 给定整数 n 作为楼层数,再给定整数 k 作为 ...
- 今日头条面试真题及答案——软件测试工程师面试秘籍
2018年今日头条面试真题及答案 试题1.在浏览器地址栏里输入一个网址,接下来会发生什么? 答案:发生的操作如下. (1)浏览器查找该网址的IP地址. (2)浏览器根据解析得到的IP地址向Web服务器 ...
- 谈谈100层会碎的两颗玻璃球
问题 有这样一道经典面试题(据说曾被纳入谷歌校园招聘题库),大意为有一栋100层高的大楼,已知从某一层起,玻璃球下落一定会碎,现给你两颗这样的玻璃球,如何用最少的试验次数,确定玻璃球在哪层刚好会碎. ...
最新文章
- nginx介绍及常用功能
- Google Test(GTest)使用方法和源码解析——结果统计机制分析
- 大数据的两面性_大数据,多大的数据才是大数据?
- 南开大学提出最新边缘检测与图像分割算法,精度刷新记录(附开源地址)
- 技术无罪?谷歌AI伦理团队负责人被解雇
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
- pcap python 生成_python+pcap+dpkt 抓包小实例
- 3.Android的新虚拟ART与原虚拟机DVM的区别
- eclipse中简单实现自己的工具类打包成jar包并在项目中使用
- jquery自定义一个放大镜
- 华为交换机静态路由配置案例_快速了解配置三层交换机策略路由配置
- 重置物体的position, rotation, scale,复制物体的组件
- Office文档修复介绍之:laola文件格式介绍
- Android仿微信朋友圈10s视频编辑
- ILSVRC-2015 ILSVRC-2017VID数据集下载
- windows/linux远程开关机原理及实现
- 基于easyx低配版flappybird
- Python-分割PDF文件-如何自定义分割-按页数分割PDF-PyPDF2
- SpringCloud的实用篇
- Android——Framework之Packamanager深析
热门文章
- 基于Excel数据库的Cadence元件库管理
- 机器学习实例-决策树和随机森林预测员工离职率
- c#推箱子小游戏代码_C语言实现推箱子小游戏
- The puzzle
- 微信小程序 用户中心界面(二)
- 萝卜青菜各有所爱------npm和yarn
- 用pyqt原生功能实现自由屏幕截图
- python xlrd pandas_Python:Pandas pd.read_excel提供ImportError:为Excel supp安装xlrd = 0.9.0
- 学习PHP遇到的乱码问题
- Python基础知识:切片