问题:
一种杯子,若在第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