十分慚愧,水平有限,更新博文速度太慢。太慢的原因應該歸結於人太懶惰,水平也有限;或是本人太自以為是,自認為有意思的東西才會發表博文,像今天早上喝了豆漿吃了包子這種炫富的事情我是不會更新到博客的,我不喜歡炫耀自己早晨可以吃得這么好。
言歸正傳,今天分享的是我解一個題目的思路。當然我是自認為這個題目有意思,有研究的價值。題目如下:
“你拿着兩個雞蛋站在100層的大樓上。雞蛋或許結實到從樓頂掉下也不會摔破,或許很易碎,在一樓摔下就破碎。最少試驗多少次可以找出雞蛋不會被摔碎的最高樓層?”
第一眼看到這個題目,審錯題,沒注意是兩個雞蛋,就貿然得出了結果:二分查找的變型,2^7 = 128,特點在於最優和最劣都是7次才能找出最高樓層。
第二眼發現是只有兩個雞蛋,那么這個題目趣味性一下子上來了。
我的解法如下:
思路:你要選擇一個樓層丟雞蛋,這個雞蛋會有兩種情況。碎和不碎,當碎的情況所需要的次數和不碎的情況所需要的次數相等時,達到最優。這是最經典的分而治之的思路。
但對於有意思的題目我總想再搞點花樣出來。如下:
設函數f(x,y),其中x是扔雞蛋的次數,y是當前具有的雞蛋個數。 f(x,y)的結果是參數x,y所能確定的最高層數。
那么f(x,2) = f(x-1,2) + f(x-1,1) + 1
而f(x-1,1) = x-1 //只有一個雞蛋時,你只能從最底層一層一層往上試
則 f(x,2) = x+(x-1) + ... + 1 = (1+x)*x/2
目前要求的問題是:
f(x,2) >= 100 且 f(x-1,2)<100
求出來 x=14
按照這個解法,得出來實際過程是:
1+2+。。。+14 = 105
所以第一次丟是在第14層。
如果碎了 那么剩下的最后一個雞蛋從第1層開始丟,不碎就+1層,14次可以試出來。
如果在14層丟沒碎,則下一次在(14+13)=27層丟,次數少了一次,但是確定的層數也少了一個可確定的最大層數。
最終你發現這是一個遞歸問題,最終不管碎不碎,都是14次。
值得表揚的是,我會文字高亮了!
謝謝大家看到最后,本人水平有限,如有失誤之處歡迎指點。本人郵箱 rongguozhen@foxmail.com
