一道有趣的面試題

2021-09-29 09:33:15 字數 1396 閱讀 9295

日前在網上看到一道

面試題。頗有意思,也細細的研究一番。現將該題發布於此,和各位交流一下。

某幢大樓有100層。你手裡有兩顆一模一樣的玻璃珠。當你拿著玻璃珠在某一層往下扔的時候,一定會有兩個結果,玻璃珠碎了或者沒碎。這幢大樓有個臨界樓層。低於它的樓層,往下扔玻璃珠,玻璃珠不會碎,等於或高於它的樓層,扔下玻璃珠,玻璃珠一定會碎。玻璃珠碎了就不能再扔。現在讓你設計一種方式,使得在該方式下,最壞的情況扔的次數比其他任何方式最壞的次數都少。也就是設計一種最有效的方式。

例如:有這樣一種方式,第一次選擇在60層扔,若碎了,說明臨界點在60層及以下樓層,這時只有一顆珠子,剩下的只能是從第一層,一層一層往上實驗,最壞的情況,要實驗59次,加上之前的第一次,一共60次。若沒碎,則只要從61層往上試即可,最多只要試40次,加上之前一共需41次。兩種情況取最多的那種。故這種方式最壞的情況要試60次。

那該如何設計方式呢?

仔細分析一下,關鍵是第一次的選擇,假設在第n層,如果第一次扔的時候就碎了,那麼第二顆珠子只能是從第1層開始一層層往上試,此時,最壞的情況為n-1次,加上第一次,則一共為n層。那如果不碎呢,第二顆珠子會從n+1層開始試嗎?很顯然不會,此時大樓還剩100-n層,問題就轉化為100-n,2顆珠子,請設計最有效方式。

哦,等等想到什麼?呵呵,我想到遞迴

定義乙個函式f(n),表示n層樓最有效方式最壞情況的次數。

通過上面的分析,有

f(n)=min(max(1,1+f(n-1)),max(2,1+f(n-2)),……,max(n-1,1+f(1)))

f(1)=1

本面試題就是求f(100)

下面把解法的**賦予其後,用的是vb2005

1

dimf(

100)

asinteger

, i

asinteger

, j

asinteger

2dim

tc as

integer3f(

0) =0

4f(1)

=156

fori =2

to100

7f(i)

=100

8forj =

i to

1step -1

9tc

=iif(j

>1+

f(i

-j), i, 1+

f(i

-j))

10if

tc <

f(i)

then

f(i) =tc

11next

12next

1314

fori =1

to100

1516

debug.print(f(i))

17next

一道有趣的面試題

下面是一道很經典的智力型面試題,也是我一朋友在bat面試中親身見識過的一道題。各位來體驗一下,看看自己的大腦是不是好使。有一棟樓共100層,乙個雞蛋從第n層及以上的樓層落下來會摔破,在第n層以下的樓層落下不會摔破。給你2個雞蛋,設計方案找出n,並且保證在最壞情況下,最小化雞蛋下落的次數。假設每次摔落...

一道有趣的面試題

今天去智聯招聘面試他們資料分析師的時候,部門boss給我出了三道題,前兩道暫且不提,第三道很有意思,作文以記之。題目3 到的每層電梯門口都放著一顆鑽石,鑽石大小不一 各不相同 你乘坐電梯從到,每層樓電梯門都會開啟一次,只能拿一次鑽石且沒有掉頭向下的機會,問怎樣才能拿到 最大 的一顆?讀完題目我第一反...

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...