题目描述:
一道非常经典的面试题目,给你两个鸡蛋,在一幢100层的大楼里面,至少扔几次可以测出让鸡蛋破碎的临界高度?

两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。

有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。

最少需要几次测试,才能得到摔碎鸡蛋的楼层?方案如何?

=================================================

对于这个问题,如果从编程角度而言,最简单的思路是用动态规划的思想来解决,不过本文不将其从编程角度分析,而是从数学角度对问题进行论述。

================================================

对这个问题,原始问题——【100层楼,最少需要几次测试,才能得到摔碎鸡蛋的楼层】,直接考虑不容易考虑,但是,如果将这个问题进行一种等价的转换,这个问题将会变得非常容易解答。个人认为,这个转换是解决这个问题的核心,这个转换是:

      转换问题——【两个鸡蛋,进行k次测试,最多可以测试几层楼】

如果大家能想到将“原始问题”变为“转换问题”,这个问题个人认为已经解决一半了,转换后,这个问题豁然开朗,思路全开。

现在我们以“转换问题”为模板进行考虑,有两个鸡蛋,第一个鸡蛋如果破碎,第二个鸡蛋就必须只能一层一层的测试了,而且,我们要求进行k次测试就将摔碎鸡蛋的楼层必须找到.

=====================================================

考虑第一次测试。第一次测试的时候,第一个鸡蛋不能放置的楼层太高了,否则,如果第一个鸡蛋破碎,第二个鸡蛋可能不能在k次测试后得到结果。但是也不能放置的矮了,因为如果放置的矮了,第一个鸡蛋破碎了还好说,如果没破,我们浪费了一次测试机会,也不能说是完全浪费了,不过至少是让效用没有最大化。所以,第一次测试的时候必须让第一个鸡蛋放置的不高不矮。

不高不矮是多高?高到如果第一个鸡蛋破碎后第二个鸡蛋刚好能完成k次测试得到结果这个目标。由此可知,第一次测试所在的楼层高度为k,如果第一次测试第一枚鸡蛋破碎,则剩下k-1层楼,一层一层的试,k次一定能完成目标。

如果第一次测试,第一枚鸡蛋没有破碎,则我们现在只有k-1次测试机会了,而且直到了k楼及其以下都是安全的了。我们消耗了一次测试机会,但是一次就测试了k层楼。

然后只有k-1次机会了,第二次测试,我们可以在k层的基础上再增加k-1层了,注意,这个时候由于我们只有k-1次机会,所以这次只能再增加k-1层,以保证测试的时候第一枚鸡蛋破碎的情况下仍然能完成任务。

于是,重复上述过程,直到最后一次机会,我们总共测试的楼层数为:

 k+(k-1)+(k-2)+(k-3)+......+1

然后,再回到“原始问题”,100层楼,如果需要k次测试才能测试完成,则必须有

 k+(k-1)+(k-2)+(k-3)+......+1 = k(k+1)/2 >=100

则可以得到,k≥14

也就是需要14次测试才能得到结果,而且这个过程也将测试方案一并得出来,就是第一次在14楼测试,如果第一枚蛋碎,则剩余13次机会,13层未知楼层,恰好,第二次在14+13=27楼测试,如此。

如果不是100层,而是N层,需要的测试次数为k,则有

=========================================================

然后,这个问题这个时候还可以扩展了,如果我们有三个鸡蛋,有k次机会,我们最大可以测试多少层楼?

思路同前面一样,第一次测试,不能太高也能太矮,必须恰到好处,也就是第一枚鸡蛋如果破碎,剩余k-1次机会能将剩余楼层给测试完。

由上面结论,k-1次机会最多可以测试k(k-1)/2层楼,所以第一次在k(k-1)/2+1层楼,第一次如果第一枚鸡蛋不碎,第二次在此基础上增加(k-1)(k-2)/2+1层楼,于是,三个鸡蛋k次机会总共测试楼层数为

k=9.

至于四个鸡蛋,五个鸡蛋,以至于M个鸡蛋,可以以此类推,方法同上。

转自:http://blog.sina.com.cn/s/blog_6c813dbd0101bh98.html

100层楼,2个鸡蛋问题相关推荐

  1. 动态规划--100层楼2只鸡蛋最少次可以测试最高楼层不摔破

    100层楼2个鸡蛋 原题目:100层楼2个鸡蛋最少需要几次测试,才能得到摔破鸡蛋的楼层: 转换题目:两个鸡蛋,进行k次测试,最多可以测试多少层? 分析:第1个鸡蛋测试所在的楼层高度为k层. ①如果第1 ...

  2. 100层楼2个鸡蛋求最低破碎楼层与信息论

    100层楼2个鸡蛋求最低破碎楼层经典算法可以参考  http://blog.sina.com.cn/s/blog_6c813dbd0101bh98.html 这篇文档我们从更高的视角-信息论的角度去看 ...

  3. 100层楼2个鸡蛋,如何得知鸡蛋能承受几层的撞击

    有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破.给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数. 我们先假设最坏情况下,鸡蛋 ...

  4. 100层楼2个鸡蛋,测试其最低破碎楼层问题

    原文章链接 http://www.cnblogs.com/yangai/p/5391533.html http://www.tuicool.com/articles/NzUNJr http://blo ...

  5. 2个鸡蛋100层楼/2个玻璃珠39层楼

    题目描述: 你拿着两个鸡蛋站在100层的大楼上.鸡蛋或许结实到从楼定掉下也不会摔碎,或许很易碎.最少试验多少次可以找出鸡蛋被摔碎的最低楼层? 腾讯2017笔试题也有类似的题目,描述是针对2个玻璃珠和3 ...

  6. 100层楼扔2个鸡蛋、3个鸡蛋……

    原题目 现有2个鸡蛋,楼高100层,假设从n层楼及以上扔下会摔碎,n层以下不会,那么怎样扔能以最小的次数得到n? 分析 最先想起来的是二分法的题目:100层最少需要扔多少次鸡蛋才能求得n?答案是cei ...

  7. 2个鸡蛋,100层楼问题;

    题目: 现有两个硬度相同的鸡蛋,以及一栋100层的楼,如果鸡蛋在第n层楼摔下去不会碎,在n-1层楼摔下去会碎,那么鸡蛋的硬度是n,如果要测出鸡蛋的硬度n,在最坏情况下最少要测试几次?每测试一次就把一个 ...

  8. 关于100层楼,扔两个鸡蛋,求摔碎鸡蛋的临界层的问题

    题目描述: 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事.有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置.可以摔碎两个鸡蛋. 网上有人 ...

  9. 两个鸡蛋,100层楼,找出摔碎鸡蛋的最低楼层,所用的摔鸡蛋次数最少

    题目:问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损.现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2 ...

最新文章

  1. python encoding报错_python用requests递归查询页面 报错 ChunkedEncodingError
  2. C#游戏开发快速入门教程Unity5.5教程
  3. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。...
  4. 永洪Desktop交叉表怎么按月份汇总
  5. Python基础教程:新式类与经典类
  6. asp.net中上传文件实例
  7. bug in MicrosoftAjax.debug.js
  8. 资源丨2200万室内场景数据集,包含语义、全景、灯光等十余种效果
  9. 与继承相关的一些重构(一)
  10. POJ1679 The Unique MST —— 次小生成树
  11. 北京的哪些地方开的发票可参与国家税务局的摇奖
  12. 苹果Mac中delete键的七种用法!
  13. No buffer space available 和windows 2003复制文件时:配额不足,无法处理该命令
  14. adobe清理工具_Adobe终于通过其新的渐变工具实现了这一点-UX评论
  15. netkeeper客户端 Linux,netkeeper_for_linux
  16. alpha和color key
  17. 单片机c语言数码管显示循环0到9程序,七段数码管0~9循环显示程序
  18. 乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)
  19. python做投标生成器_生成器
  20. vue更改vue-admin-telement模板登录

热门文章

  1. html图像标签、绝对路径和相对路径
  2. (三)JMockit API:@Mocked -基础篇
  3. JAVA格式代码出现两次_NullPointerException使用JMockit测试Mocked java.io.File两次
  4. CSDN周赛第32期:赢图书《金融级IT架构:数字银行的云原生架构解密》 和定制周边
  5. TinyG 入门06
  6. pygame实现找方块(色彩敏感度测试)游戏
  7. EISeg——应用于语义分割的自动标注软件
  8. STM32精英版(正点原子STM32F103ZET6开发板)学习篇12——电容触摸按键实验
  9. Excel VBA 小程序 - 文本型数字转为数值型数字
  10. 物理机无法ping通虚拟机,虚拟机能ping通物理机