1. 程式人生 > >100層樓有一個雞蛋,如果確定剛好摔碎的那個樓層,最壞情況下最少需要摔多少次?

100層樓有一個雞蛋,如果確定剛好摔碎的那個樓層,最壞情況下最少需要摔多少次?


分析:

這道題我們應反過來考慮,就是用a塊石頭扔b次至多一定可分辨層數X(a,b)。

先從最簡裝的一塊石頭考慮,很顯然,
X(1,1) = 1
X(1,2) = 2
X(1,3) = 3
.
X(1,i) = i

再考慮二塊石頭,顯而易見
X(2,1) = 1

對於X(2,2),我們可這樣考慮,當我們扔第一次後,有兩種可能:破和不破.

如果石頭破了,則

1,我們還剩1塊石頭.
2,我們下一次只需檢查下面的樓層.
3,我們還剩1次機會.
即我們還可分辨下面的 X(1,1) 層.

如果石頭沒破,則

1,我們還剩2塊石頭.
2,我們下一次只需檢查上面的樓層.
3,我們還剩1次機會.
即我們還可分辨上面的 X(2,1) 層.

我們知道,X(1,1) = 1.所以我們第一次從第二層開始扔,如果石頭破了,則再測試第一層.如果沒破則再測試第三層.
所以用2塊石頭扔2次至多一定可分辨
1 + X(1,1) + X(2,1) = 1 + 1 + 1 = 3 層.

不失一般性,我們考慮
X(2,i)

對X(2,i),我們這樣考慮,當我們扔第一次後,有兩種可能:破和不破.

如果石頭破了,則

1,我們還剩1塊石頭.
2,我們下一次只需檢查下面的樓層.
3,我們還剩i-1次機會.
即我們還可分辨下面的 X(1,i-1) 層.

如果石頭沒破,則

1,我們還剩2塊石頭.
2,我們下一次只需檢查上面的樓層.
3,我們還剩i-1次機會.
即我們還可分辨上面的 X(2,i-1) 層.


X(2,i) = 1 + X(1,i-1) + X(2,i-1)

接下來我們考慮
X(i1,i2)

同樣,對 X(i1,i2),我們還是這樣考慮,當我們扔第一次後,有兩種可能:破和不破.

如果石頭破了,則
1,我們還剩i1-1塊石頭.
2,我們下一次只需檢查下面的樓層.
3,我們還剩i2-1次機會.

如果石頭沒破,則
1,我們還剩i1塊石頭.
2,我們下一次只需檢查上面的樓層.
3,我們還剩i2-1次機會.


X(i1,i2) = 1 + X(i1-1,i2-1) + X(i1,i2-1)

很明顯
無論你有幾塊石頭,扔一次只能測試一層.


X(i,1) = 1.

這樣,我們可製出如下表:

扔的次數: 1 2 3 04 05 06 007 008 009 010 011 012 013
分辨層數:
一塊石頭: 1 2 3 04 05 06 007 008 009 010 011 012 013
二塊石頭: 1 3 6 10 15 21 028 036 045 055 066 078 091
三塊石頭: 1 3 7 14 25 41 063 092 129 175 231 298 377
四塊石頭: 1 3 7 15 30 56 098 162 255 385 561 793 1092
五塊石頭: 1 3 7 15 31 62 119 218 381 637 1023
六塊石頭: 1 3 7 15 31 63 126 246 465 847 1485

也就是說用4塊石頭扔12次至多一定可分辨793層,扔13次至多一定可分辨1092層.

答案:

1000層的樓房,

用4塊石頭,扔13次一定可測試出來.