zoukankan      html  css  js  c++  java
  • 你拿着两个鸡蛋站在 100 层的大楼上。鸡蛋或许结实到从楼顶掉下也不会摔破。或许很易碎,在一楼摔下就破碎。

    你拿着两个鸡蛋站在 100 层的大楼上。鸡蛋或许结实到从楼顶掉下也不会摔破。或许很易碎,在一楼摔下就破碎。
    请问最少试验多少次可以确保找出鸡蛋不会被摔碎的最高楼层?

    注意:
    1、只有两个蛋
    2、确保找出


    一开始,我们先用猜的吧:
    我猜测,鸡蛋不会被摔碎的最高楼层是27层,于是从27层摔了一个鸡蛋下去。
    结果有两种:
    1、鸡蛋碎了。那么,鸡蛋不会被摔碎的最高楼层,在第1层至第27层之间。此时只剩下一个蛋了。为了确保找出,这个蛋,就不能猜了。因为,万一又猜错了,就没有鸡蛋可以试验,也就无法确保找出鸡蛋不会被摔碎的最高楼层了。那要怎么办呢?很简单,从第1层开始试验,如果第1层就碎了,就已经能得出结论了,即第1层就会摔碎。而如果从第1层摔下去没碎,那就第二层,第三层...直到在某一层摔碎为止,这样就能确保得出,鸡蛋不会被摔碎的最高楼层。因为我们一开始猜测的是27层,而27层时碎了一个鸡蛋。第二个鸡蛋从第1层开始,往上试验,最多试验到第26层,也就是26次,加上猜的那次,最多27次确保找出来。请接着看第二种结果
    2、第27层鸡蛋没碎。那么,鸡蛋不会被摔碎的最高楼层,在第27至100层之间,同上,仍然要从低层的开始,往上试验,也就是,第2个鸡蛋,从28层开始,往上到100层,直到某一层摔碎,这样,最多要试验73次
    结论:如果采用猜测的方法,猜鸡蛋不会被摔碎的最高楼层是27层,那么,要确保找出来,需要试验73次(为什么试验次数取最大的?因为鸡蛋不会被摔碎的最高楼层你不知道,而要确保找出来,那么,小于73次,都是可能找出,而试验73次,则一定能找出,所以取最大试验次数,也就是能确保找出鸡蛋不会被摔碎的最高楼层的试验次数是73次)请接着往下看

    因为上面猜测的是27层,得出需要试验73次才能确保找出。如果猜测的是50层呢?根据上面的分析,就是从1-49,51-100,这样的,最多只要50次,就能确保找出。

    好像发现了什么:第一个猜测的楼层不同,最多试验次数也不一样(注意,你只有两个鸡蛋,第二个鸡蛋,绝对不能猜测,因为万一猜错,就没有鸡蛋可以试验,也就不能确保找出了,所以,第二个鸡蛋,必须从最低层开始摔,直到某层摔下,鸡蛋会碎,这样,就能确保找出鸡蛋不会被摔碎的最高楼层)

    上面,我们一个猜测的最高楼层是27层时,最多需要试验73次,就能确保找出鸡蛋不会被摔碎的最高楼层
    而第一个猜测的最高楼层是50层时,最多需要50次就可以了
    那有没有办法,比50次更少呢?


    假如我第一次猜的是第10层
    如果第10层碎了,就从1-9,试验9次
    如果第10层没碎,你还有两个完好的蛋,可以再猜一次
    这次猜第20层
    如果第20层碎了,就从11-19,试验9次
    如果第20层没碎,你仍然还有两个完好的蛋,可以继续猜一次
    30 层
    40 层
    .
    .
    .
    100 层
    这种方式,试验的最多次数是下面这种情况:
    10层不碎(试验一次)、20层不碎(试验一次)...90层不碎(试验一次),100层碎了(试验一次)
    那么试验次数就是 10 个“试验一次” + (91至99,从低层往上试验9次)
    最多试验19次。比上面的50次少了很多


    还有没有办法,让次数更少呢?

  • 相关阅读:
    【判环】Perpetuum Mobile
    【计算几何】Water Testing
    【动态规划】Überwatch
    【规律】Cunning Friends
    【转载】【最短路Floyd+KM 最佳匹配】hdu 2448 Mining Station on the Sea
    【动态规划】Concerts
    【计算几何】The Queen’s Super-circular Patio
    【规律】Farey Sums
    【规律】Growing Rectangular Spiral
    Mancala II
  • 原文地址:https://www.cnblogs.com/liaolongjun/p/7994490.html
Copyright © 2011-2022 走看看