[面试题]100层楼丢玻璃球,一旦超过某层就会破,你只有两个球。

题目:

 有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??

思路:最简单的,扔一个到51层 ,碎了,再试后面50层 ,没碎再试前面50层,总共50次。时间复杂度较高。是个烂方法。

          有没有一种方法,能分段查找呢。一个球均匀分段的扔,比如 20层20层的扔,如果在40层破,我从20层扔到40层。这样大大提高了效率。但是怎样才能得到好的分段呢?第一次扔k层 ,则次数time=1,第二次,如果破了,要试从1到k-1层,此时需要Time=time+k-1=k 次;

如果没破,还要扔k层,则次数为time=2;如果破了,还要扔k+1到2k-1层,再加上2 即Time=Time+k-2=k。还是K次;

注意每多扔一次 少测试一层。次数却多一次。实际只要能测到n-1层就够了

以此类推如果满足 k+(k-1)+(k-2)+k-3+k-4+....+2+1>=n-1 。

可以化简得到:k(k-1)>=2(n-1)

这里,n=100 所以 解得k=14。

所以只要14次就可以确认那层试临界层。

猜你喜欢

转载自blog.csdn.net/qq_34433210/article/details/84675501