1. 程式人生 > >面試題十五期-一個騰訊的面試題~biu

面試題十五期-一個騰訊的面試題~biu


 

一個騰訊的面試題

 

1、1000瓶藥水,其中至多有1瓶劇毒,現在給你10只小狗在24小時內通過小狗試藥的方式找出哪瓶藥有毒或者全部無毒(小狗服完藥20小時後才能判斷是否中毒)。

 

解題思路:首先,不能考慮(24-20=4小時),在4小時內,將1000瓶藥水依次餵給10只狗,將喂藥的時間點與藥水記錄下來。不考察這種查詢方式。

標準的解題方法:

把狗從0-9編號;

 

把藥水按1-1000編號;

 

把藥水編號按二進位制,如果第i位(因為最大1000,所以bit位為0-9)bit位為1,則分給編號為i的狗狗喝;

 

最後得一二進位制數,如果編號為i的狗狗死了,該數的第i bit位為1,該數就是有毒的藥水編號。

 

他說的比較專業,下面我用例項給解析一下:

 

用 0、1、2、3、4、5、6、7、8、9 給小狗編號;

 

而藥水按1-1000編號;

 

我們把每瓶藥水的編號轉換為二進位制數,由於2的10次方=1024,所以我們將二進位制數定為有10個數位,如:

 

1=0000000001

 

13=0000001101

 

214=0011010110

 

對二進位制轉換不熟悉的朋友可以用“開始-程式-附件-計算器-檢視-科學型”來輕鬆轉換。

 

這樣轉換以後,每個藥水編號的二進位制數的每一位都分別對應一隻小狗;

 

我們定義每瓶藥水要餵給其二進位制編號位數為“1”的那位對應的小狗喝;

 

由於2的10次方=1024>1000,所以這些二進位制編號組合都是唯一的;

 

當我們用不到4小時的時間將1000瓶藥水分別餵給相應的小狗喝後,就可以去看看書,上上網,聽聽歌來打發剩下的20小時;

 

20小時候,在一個合理的藥效發作時間後,我們統計有中毒症狀小狗的編號,中毒的定為“1”,正常的定為“0”;

 

然後依照編號順序排列,我們就可以得到一個10位的二進位制數,而將這個二進位制數再轉換為十進位制數後,這個數值就是有毒的藥水的編號了;

 

例如,最終結果是編號為 2、4、6、7、9 的小狗有中毒症狀,我們就將一個十位二進位制數的2、4、6、7、9位設為“1”,其餘各位設為“0”,即:0010101101;

 

而0010101101對應的十進位制數=173,所以第173瓶藥水就是有毒藥水!

 

真是個折磨人腦子的面試題,這就是我不進騰訊的原因

 

看到這個答案,我徹底被嚇到了。。高手太多了。

 

現實中,你們有遇到哪些“高智商”的面試題呢?

 

關注公眾號,認準城事十則面試官