1. 程式人生 > >面試題目:2個雞蛋100層樓問題

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

clas family 如果 規劃 數字 span time 試題 一次

  • 題目:
  • 兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。

- 兩種思路:

- 第一種:動態規劃,轉化公式

下面是偶的思路。

這是一個很典型的動態規劃問題。用確定minNum[n]表示雞蛋從高n層的樓摔下不碎需要的最小次數。則有

轉移方程:

minNum[n ] = min(1 + max(i – 1, minNum[n-1])) for 1<=i <= n

邊界條件:

minNum[0] = 0; minNum[1
] = 1 假設i是第一次扔雞蛋的樓層,如果破了,則為了確定下面樓層中的安全位置,需要從第一層挨著試,需要i-1次,不碎的話上面還有n-i層,還剩兩個雞蛋,需要minNum[n-i]次。

- 第二種:分析法,寫出公式

拿具體的數字作例子,假設100層樓扔16次可以搞定,那麽第一次可以且最矮必須從16層扔。碎了好說,從第一層開始試,不碎的話還有15次機會,同理最矮可以從31層開始扔

每次可以扔的最矮樓層如下

16

16 + 15 = 31

31 + 14 = 45

45 + 13 = 58

58 + 12 = 70

70 + 11 = 81

81
+ 10 = 91 91 + 9 = 100 超額完成目標。假設需要扔n次,則有:(此n也表示安全下落的層) n + (n-1) + (n-2) + … + 1 >= 100 n (n +1) >= 200 min(n) = 14

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