1. 程式人生 > >你拿著兩個雞蛋站在 100 層的大樓上。雞蛋或許結實到從樓頂掉下也不會摔破。或許很易碎,在一樓摔下就破碎。

你拿著兩個雞蛋站在 100 層的大樓上。雞蛋或許結實到從樓頂掉下也不會摔破。或許很易碎,在一樓摔下就破碎。

雞蛋 可能 結果 最大 第一個 bsp 我們 需要 無法

你拿著兩個雞蛋站在 100 層的大樓上。雞蛋或許結實到從樓頂掉下也不會摔破。或許很易碎,在一樓摔下就破碎。
請問最少試驗多少次可以確保找出雞蛋不會被摔碎的最高樓層?

註意:
1、只有兩個蛋
2、確保找出


一開始,我們先用猜的吧:
我猜測,雞蛋不會被摔碎的最高樓層是27層,於是從27層摔了一個雞蛋下去。
結果有兩種:
1、雞蛋碎了。那麽,雞蛋不會被摔碎的最高樓層,在第1層至第27層之間。此時只剩下一個蛋了。為了確保找出,這個蛋,就不能猜了。因為,萬一又猜錯了,就沒有雞蛋可以試驗,也就無法確保找出雞蛋不會被摔碎的最高樓層了。那要怎麽辦呢?很簡單,從第1層開始試驗,如果第1層就碎了,就已經能得出結論了,即第1層就會摔碎。而如果從第1層摔下去沒碎,那就第二層,第三層...直到在謀一層摔碎為止,這樣就能確保得出,雞蛋不會被摔碎的最高樓層。因為我們一開始猜測的是27層,而27層時碎了一個雞蛋。第二個雞蛋從第1層開始,往上試驗,最多試驗到第26層,也就是26次,加上猜的那次,最多27次確保找出來。請接著看第二種結果

2、第27層雞蛋沒碎。那麽,雞蛋不會被摔碎的最高樓層,在第27至100層之間,同上,仍然要從低層的開始,往上試驗,也就是,第2個雞蛋,從28層開始,往上到100層,直到某一層摔碎,這樣,最多要試驗73次
結論:如果采用猜測的方法,猜雞蛋不會被摔碎的最高樓層是27層,那麽,要確保找出來,需要試驗73次(為什麽試驗次數取最大的?因為雞蛋不會被摔碎的最高樓層你不知道,而要確保找出來,那麽,小於73次,都是可能找出,而試驗73次,則一定能找出,所以取最大試驗次數,也就是能確保找出雞蛋不會被摔碎的最高樓層的試驗次數是73次)請接著往下看

因為上面猜測的是27層,得出需要試驗73次才能確保找出。如果猜測的是50層呢?根據上面的分析,就是從1-49,51-100,這樣的,最多只要50次,就能確保找出。

好像發現了什麽:第一個猜測的樓層不同,最多試驗次數也不一樣(註意,你只有兩個雞蛋,第二個雞蛋,絕對不能猜測,因為萬一猜錯,就沒有雞蛋可以試驗,也就不能確保找出了,所以,第二個雞蛋,必須從最低層開始摔,直到某層摔下,雞蛋會碎,這樣,就能確保找出雞蛋不會被摔碎的最高樓層)

上面,我們一個猜測的最高樓層是27層時,最多需要試驗73次,就能確保找出雞蛋不會被摔碎的最高樓層
而第一個猜測的最高樓層是50層時,最多需要50次就可以了
那有沒有辦法,比50次更少呢?


假如我第一次猜的是第10層
如果第10層碎了,就從1-9,試驗9次
如果第10層沒碎,你還有兩個完好的蛋,可以再猜一次
這次猜第20層
如果第20層碎了,就從11-19,試驗9次

如果第20層沒碎,你仍然還有兩個完好的蛋,可以繼續猜一次
30 層
40 層
.
.
.
100 層
這種方式,試驗的最多次數是下面這種情況:
10層不碎(試驗一次)、20層不碎(試驗一次)...90層不碎(試驗一次),100層碎了(試驗一次)
那麽試驗次數就是 10 個“試驗一次” + (91至99,從低層往上試驗9次)
最多試驗19次。比上面的50次少了很多


還有沒有辦法,讓次數更少呢?

你拿著兩個雞蛋站在 100 層的大樓上。雞蛋或許結實到從樓頂掉下也不會摔破。或許很易碎,在一樓摔下就破碎。