兩個面試常見的智力題

1. 有N臺電腦,其中有大於一半的電腦是好電腦,其他的是壞電腦。用一臺好電腦檢測另一臺電腦,結果肯定是正確的。用一臺壞電腦檢測另一臺電腦,結果則可能是正確的,也可能是錯誤的。請寫出一個策略,找出一臺好電腦。

這個是同事發郵件問的一道題目,挺有意思的,我想了半天,只相出了一個O(n2)的解法,但是隨後有一個Intern給出了一個O(N)就可以找出一臺好電腦的解法,真是強人啊。

具體做法如下:

假設N個電腦順序排列,第一次取最前面的兩臺電腦,使這兩臺電腦互相測試,

(1)如果兩臺電腦的檢測結果都是好的,那麼這兩臺電腦,都保存下來

(2)如果兩臺電腦的檢測結果是一好一壞或者兩個都是壞,那麼這兩個電腦就從隊列中移除

(3)如果執行的是(1),那麼就使用剛纔兩臺中的後一臺電腦和其後相鄰的電腦,重新開始測試,根據結果,重複這一過程。

(4)如果執行的是(2),那麼就使用後續相鄰的兩臺電腦開始新一輪的測試,根據結果重複這一過程。

由於最開始,好電腦的臺數大於一半,因此最後當隊列中只剩下一臺電腦時,該電腦肯定是好電腦。

舉例說明如下,假設有5臺電腦,其中3臺好電腦,2臺壞電腦,假設一個可能的隊列如下:

Good ,Bad,Good,Good,Bad,依次編號爲1,2,3,4,5

那麼,首先1和2互相測試,結果肯定不可能是都好,因此,1和2同時被移出隊列,那麼隊列目前剩下3,4,5。 然後,使用3和4互相測試,因爲都是好電腦,所以結果肯定是兩個好,那麼都保留,然後使用後一個,也就是4號來和後面相鄰的電腦,也就是5號來做下輪的相互測試,因爲5號是壞電腦,那麼4和5的相互測試結果不可能是兩個好,因此,4,5同時被移出隊列。至此,就只剩下3號這一臺電腦,而且3號電腦也是一臺好電腦。

 

2.一個水桶裝滿可以裝3升水,一個水桶裝滿可以裝5升的水,請問如何用這兩個桶裝出4升的水?

這個題目是我面試的時候碰到的一個簡單的智力題目,要求不可以藉助其他的任何工具。

方法有很多,其中一種如下:

用5升的桶裝滿水,然後把5升的桶中的水倒入3升的桶中,那麼5升的桶中剩下2升水。將3升桶中的水倒掉,然後再將5升桶中剩下的2升水倒入3升的桶中。這是3升的桶中只有2升的水,也就是說剩餘的空間可以再容納1升的水。然後,將5升的水裝滿,往3升的桶中倒水,當3升的桶裝滿的時候,5升桶剩下的水必然是4升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章