一個騰訊的面試題 小狗試毒
一個騰訊的面試題
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瓶藥水就是有毒藥水!
真是個折磨人腦子的面試題,這就是我不進騰訊的原因
看到這個答案,我徹底被嚇到了。。高手太多了。
現實中,你們有遇到哪些“高智商”的面試題呢?