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

2021-07-23 07:55:12 字數 2265 閱讀 1325

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

假設dp[n]為在n層用兩個雞蛋測出臨界高度的最小次數,dp

[n]=

min(

max(

i,1+

dp[n

−i])

)(1≤

i≤n)

**實現

dp[1]=1;

for(int i=2;i<=n;i++)

}printf("max times for 100 using two eggs : %d\n",dp[100]);

int p = 100;

int cnt = 0;

while(true)

printf("%d : now is %d high : thorw at %d ,if egg break need %d times,else need %d times\n",++cnt,p,res[p],res[p],1+dp[p-res[p]]);

p = p - res[p];

}

輸出

for100 using two eggs : 14

1 : now is

100 high : thorw at

9 ,if egg break need 9

times,else need 14

times

2 : now is

91 high : thorw at

13 ,if egg break need 13

times,else need 13

times

3 : now is

78 high : thorw at

12 ,if egg break need 12

times,else need 12

times

4 : now is

66 high : thorw at

11 ,if egg break need 11

times,else need 11

times

5 : now is

55 high : thorw at

10 ,if egg break need 10

times,else need 10

times

6 : now is

45 high : thorw at

9 ,if egg break need 9

times,else need 9

times

7 : now is

36 high : thorw at

8 ,if egg break need 8

times,else need 8

times

8 : now is

28 high : thorw at

7 ,if egg break need 7

times,else need 7

times

9 : now is

21 high : thorw at

6 ,if egg break need 6

times,else need 6

times

10 : now is

15 high : thorw at

5 ,if egg break need 5

times,else need 5

times

11 : now is

10 high : thorw at

4 ,if egg break need 4

times,else need 4

times

12 : now is

6 high : thorw at

3 ,if egg break need 3

times,else need 3

times

13 : now is

3 high : thorw at

2 ,if egg break need 2

times,else need 2

times

14 : now is

1 floor , only need one time

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

兩種思路 第一種 動態規劃,轉化公式 下面是偶的思路。這是乙個很典型的動態規劃問題。用確定minnum n 表示雞蛋從高n層的樓摔下不碎需要的最小次數。則有 轉移方程 minnum n min 1 max i 1,minnum n 1 for 1 i n 邊界條件 minnum 0 0 minnum...

100層樓摔雞蛋問題

reference 題目 有一棟100層高樓,從某一層開始扔下的玻璃杯剛好摔壞,現有兩個玻璃杯,最少幾次能找到那一層?首先我要對題目的表述提點意見。這是乙個很有歧義的表述方式,容易誤導人向概率的方向去思考。比如說,我可以回答 最少一次能找到那一層 我就拿個杯子,從一樓起一層一層的摔。從概率上講,有可...

100層樓扔兩個雞蛋問題

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