100層樓摔雞蛋問題

2021-06-16 09:13:46 字數 1309 閱讀 2403

reference 

【題目】有一棟100層高樓,從某一層開始扔下的玻璃杯剛好摔壞,現有兩個玻璃杯,最少幾次能找到那一層?

首先我要對題目的表述提點意見。這是乙個很有歧義的表述方式,容易誤導人向概率的方向去思考。 

比如說,我可以回答「最少一次能找到那一層」。我就拿個杯子,從一樓起一層一層的摔。從概率上講,有可能在一樓就碎了。這不也合題意麼。 

我覺得題目可以這樣表述:

【題目】有一棟100層高樓,已知存在乙個特殊的樓層,低於這層,摔玻璃杯不會碎;從這一層起往上,摔玻璃杯一定會碎。現在有兩個玻璃杯,請設計一種策略,確保一定能在n次內找到這個特殊樓層,並且盡量讓n最小。

先隨意的考慮幾種情況,開啟思路:

如果第一只杯子破了,第二隻就只能一層一層的試,直到破為止。通過這幾種嘗試,可見關鍵在於第一只杯子怎麼利用。 

上面第三種思路給我們乙個靈感,從第a層開始摔,至少能保證100-a次內找到特殊層。

根據這個思路,解法如下:

假設我們有一種最優策略,使得n次內總能找到特殊層。 

第一次選在a層摔,破了,說明特殊層在1到a之間,用剩下的那只杯子,至少能在a-2次內找出特殊層。 

由於a是最優解,那我們可以最大化的利用第一次的跨度,使得a=n+1。 

下乙個嘗試點應該是a+(n)=(n+1)+(n)。為什麼? 

如果這層發現第乙個杯子摔碎了,就需要用第二個杯子一層一層試。從a到a+n,中間共n-1層樓,只需要n-2次就可以試出來。由於我們已經甩過兩次杯子了,所以n-2正好是我們能夠做的嘗試次數。 

同理,第三次選的樓層應該是(n+1)+(n)+(n-1),……可以看出,這是乙個等差數列,那麼第n次選擇的樓層應該是, 

(n+1)+(n)+(n-1)+…+(n+2-n) = n(2n+3-n)/2

另外,最後一次嘗試如果小於99,是不可能完成任務的。 

所以我們又有,當n=n時,n(2n+3-n)/2 >= 99,由此可推出。

n>=13

對於13,匯出我們的序列為: 

14,27,39,50,60,69,77,84,90,95,99, 

共有11個嘗試點,不難驗證,這是可行的。

其實後面還可以推出102,104,即13次嘗試,一定能從104層樓中找出那個特殊層。 

100層樓沒有用盡這個策略的所有「能量」,所以對嘗試點的選擇還可以有一些變化, 

比如,每個嘗試點都可以往前平移,只要保證第13個嘗試點大於等於99。

100層樓扔兩個雞蛋問題

解釋 兩個雞蛋一樣,只有在達到某個樓層高度時,才會摔碎。可以假設這個摔碎臨界樓層是n。可見,用二分法結果很不穩定,特別是n小於50時最糟糕 甚至會比第一種直接遍歷的還要多一次 n越大越好找,需要嘗試的次數越少。如果這個題目換成雞蛋個數不限制,那就是用二分法最快了。當最高樓層為100時,可列出不等式 ...

100層樓扔兩個雞蛋

兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。最少需要幾次測試,才能得到摔碎雞蛋的樓層?方案如何?問題轉化 兩個雞蛋,扔k次,最多測試多少層樓?假設第乙個雞蛋從m層扔下...

面試題目 2個雞蛋100層樓問題

最樸素的做法是從100層一直扔到 層,不過這樣明顯不是最優的。這題目其實可以轉化為dp求解,假設有 層,你隨機選了一層 如果雞蛋碎了,那麼你只剩乙個雞蛋了,為了確保能夠找到臨界高度,你不得不從第一層往上一層一層扔剩下的乙個雞蛋。如果沒碎呢,你還剩 個雞蛋,但你已經用了一次測試機會。這時候的次數應該為...