作者bleed1979 (十三)
看板Prob_Solve
標題Fw: [討論] Google面試問題
時間Sat Apr 12 02:08:15 2014
※ [本文轉錄自 Soft_Job 看板 #1JI2zrVk ]
作者: bleed1979 (十三) 看板: Soft_Job
標題: [討論] Google面試問題
時間: Sat Apr 12 02:07:46 2014
問題:
假設你有兩顆蛋,然後有一棟100層樓高的大樓。
而蛋的特性有的可能很堅固,堅固到從一百層樓跌下都沒事,
有的可能很脆弱,一樓就可以摔破。
現在你只知道這這兩顆蛋是完全相同的,
你想要知道蛋最高從哪一層樓摔下來不會摔破。
問題是:你要摔幾次才能計算出來?
(如果你低於高度摔下蛋,蛋就沒事,如果高於那個樓層,蛋就完蛋)
在這過程你可以摔破蛋。
--- 以下是完全不經大腦思考的 rough 策略,有雷 ---
http://ideone.com/B7E85H
策略是:
當我還有兩次機會時,我使用二分法。
當我只剩一次機會時,選擇已經安全的樓層 + 1。
附上此策略的解答 樓層 => 次數
1=>3
2=>4
3=>5
4=>6
5=>7
6=>8
7=>9
8=>10
9=>11
10=>12
11=>13
12=>14
13=>15
14=>16
15=>17
16=>18
17=>19
18=>20
19=>21
20=>22
21=>23
22=>24
23=>25
24=>26
25=>27
26=>28
27=>29
28=>30
29=>31
30=>32
31=>33
32=>34
33=>35
34=>36
35=>37
36=>38
37=>39
38=>40
39=>41
40=>42
41=>43
42=>44
43=>45
44=>46
45=>47
46=>48
47=>49
48=>50
49=>50
50=>3
51=>4
52=>5
53=>6
54=>7
55=>8
56=>9
57=>10
58=>11
59=>12
60=>13
61=>14
62=>15
63=>16
64=>17
65=>18
66=>19
67=>20
68=>21
69=>22
70=>23
71=>24
72=>25
73=>26
74=>26
75=>4
76=>5
77=>6
78=>7
79=>8
80=>9
81=>10
82=>11
83=>12
84=>13
85=>14
86=>15
87=>15
88=>5
89=>6
90=>7
91=>8
92=>9
93=>9
94=>6
95=>7
96=>7
97=>7
98=>7
99=>7
100=>7
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.203.156
※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1397239669.A.7EE.html
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: bleed1979 (220.135.203.156), 04/12/2014 02:08:15
推 LPH66:其實有比二分法更好的答案...提示: 那個 50 其實很容易變小 04/12 06:33
→ LPH66:沿著這個變小的思路就會得到最佳解了 04/12 06:35
→ testPtt:期望值應該都是51次 04/12 09:22
→ testPtt:想想開方根好像比較正確:19次 04/12 09:44
→ tjjh89017:我的策略跟樓上一樣@@ 但是聽說有更小的@_@ 04/12 12:27
推 dozyclover:14次 f(0)=0 f(n)=max(j-1,f(i-j))+1, 1<=j<=n 04/12 14:36
推 dozyclover:f(n)=min(max(j-1,f(i-j))+1), 1<=j<=n 這樣才對QQ 04/12 15:27
→ dozyclover: n 一直打錯 04/12 19:04
推 guest2:10次 04/13 00:16
推 guest2:破1顆後step可以是2 04/13 00:22
推 guest2:不對 我錯了= = 04/13 00:31
推 FRAXIS:看wikipedia的dynamic programming裡面就有解答了.. 04/13 07:41
推 DJWS:想請教有沒有O(n)的方法,甚至是低於O(n)的方法? 04/20 18:12