今天,一哥们带回来一道题,很有意思。题目大概是这样:
给你两个玻璃球,在最少实验次数,求出它的最大摔碎的高度,给出的摔碎的高度是1-100层楼之间,不考虑其他因素的影响。
首先,来分析一下这个问题:两次机会,最少次数,1-100层高度。最先想到的时折半的方法求解,是吧?可是,限制条件是两次机会;那行,顺序查找,可是,限制条件是最少次数;那行,折半加顺序查找,可是,还是最少次数限制了你,你只是做了一步的优化。
下面,详细的分析一下,怎么保证次数最少而且两次机会就能实验出来:
第一次的测试投掷我们不折半,而是,指定一个m,如果碎了,我们就从1-(m-1)来查找,你肯定会有疑问那还是得顺序查找,对,所以这个m的值至关重要,而怎么求解这个m呢?我们先假设m层不碎,后面我们要递增的层数要递减,第一次是m层,我们就递增m-1层,以此类推则有:
那猜测的层数为:m+(m-1)+(m-2)+......+1=99 ->m*(m+1)/2=99,为什么是99呢?因为如果99都没碎,题中告诉了范围是100,则肯定是100层碎掉。m≈14
那保持不碎的情况就是:14 27 39 50 60 69 77 84 90 95 99
再举个碎的例子:比如14层就碎了 则为 1 2 3 4 5 6 7 8 9 10 11 12 13
134



被折叠的 条评论
为什么被折叠?



