确定鸡蛋最高摔坏楼层的面试题

确定鸡蛋最高摔坏楼层的面试题

问题描述:给两个鸡蛋,确定鸡蛋从楼上摔下会摔坏的最高楼层,并且使试摔次数最少。最高100层。最低可摔楼层为2楼,若100层没破,则最高楼层为99。

方法一:二分法

1蛋第一次在50 [即(100+1)/2]层试摔

若破了,2蛋从2层开始往上摔,直到找到最高摔不破楼层。

若没破,1蛋从[(50+100)/2]层开始试摔,依次二分,直到1蛋破了,2蛋从1蛋破之前的试摔楼层开始逐层向上试摔,直到找到最高摔不破楼层。

最坏情况:1蛋在50层破了,2蛋在49层破了,共摔了49次。

方法二:十分法

1蛋第一次在10层试摔

若破了,2蛋从2层开始试摔,直到找到最高摔不破楼层。

若没破,1蛋从20层开始试摔,若没破楼层依次加10,直到摔破为止,2蛋从1蛋破之前的试摔楼层开始逐层向上试摔,直到找到最高摔不破楼层。

最坏情况:1蛋在100层破了,2蛋在99层破了,共摔了19次

方法三:等差法

1蛋第一次在14层摔

若破了,2蛋从2层开始往上摔,直到找到最高摔不破楼层。

若没破,1蛋从14+13层开始摔,若没破,楼层增量为本次增量-1,直到摔破为止,2蛋从1蛋破之前的试摔楼层开始逐层向上试摔,直到找到最高摔不破楼层。

1蛋的可能楼层为14,27,39,50,60,69,77,84,90,95,99

最坏情况:不管1蛋何时破(100除外),2蛋破在1蛋破的前一个楼层,共摔了14次

此题利用分治的思想,1蛋确定范围,2蛋精确定位。

十分法不管1蛋在哪破,2蛋的最大试摔次数都是一样的,导致1蛋试摔次数越多,最大的试摔次数也越多。

等差法把1蛋试的试摔次数从2蛋的试摔次数中扣除,1蛋试摔次数越多,2蛋可能的试摔次数越少。

等差法的关键是确定1蛋第一次的试摔楼层n,1蛋以后的试摔层数为:[当前层数]+[n]-[1蛋的试摔次数]。这个n也为最坏情况下的试摔次数。应该有{max(n)|1+2+...+n<=100}

因为要求试摔次数最少,所以n不能太大

而如果n太小,1蛋的可能试摔次数会超过n,导致最坏的试摔次数变大。

利用等差法,可以摔出任何想要的比最小值大的最坏试摔次数(当然小于99)。

如果有多个蛋,留两个蛋来实施等差法,用其余的蛋来实施二分法,减小问题的规模。

点击打开链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值