用最少的测试找到恰巧使杯子破碎的楼层

问题:

一种杯子,若在第N层被摔破,则在任何比N高的楼层均会破;若在第M层不破,则在任何比M低的楼层均不会破,给你两个这样的杯子,让你在100层高的楼层中测试,要求用最少的测试次数找出恰巧会使杯子破碎的楼层。

解析:

题目要求用最少的测试次数找出恰巧会使杯子破碎的楼层,意思是说在各个不同的给出的可行方案中最坏的情况下的最小值;比如:

方案1:我们从1楼开始往100楼一层一层的丢,则最好的情况是在1楼就坏了,最坏的情况下是在100楼才坏的,因此这种方案的最坏值也即这个方案的次数是100;

我们假设第一次测试在x层楼,如果摔碎的话,可以利用另一只杯子从第1层开始直到第x-1层进行测试,这样需要测试x次;
如果在x层没有摔碎,第二次测试在第x+(x-1)开始测试,如果摔碎的话,可以利用另一只杯子从第x+1层开始直到第x+(x-1)-1层进行测试 (因为这样的话我们保证了在x+(x-1)层摔碎的情况下(意味着在x层没有摔碎)最多进行测试x次(x层楼一次,加上x+1层开始直到第x+(x-1)-1层共x-1次))。

如果在第x+(x-1)层没摔碎,第三次测试在第x+(x-1)+(x-2)开始测试,原因同样的道理;

...

倒数第二次(即第x-1次)的楼层在x+(x-1)+(x-2)+...+2层;
最后一次(即第x次)的楼层在x+(x-1)+(x-2)+...+2+1层;


这样递减两次测试之间的楼层数,这样就保证了我们这种方案的最坏情况是x次,为了测试100层楼,我们需要保证:

x+(x-1)+(x-2)+...+2+1 >= 100;

则有 x最小整数为: 14;

所有这个方案丢的楼层为:

14 27 39 50 60 69 77 84 90 95 99 100

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值