瓶水有毒問題的變型有很多:
- 1000瓶水有1瓶水有毒,老鼠喝一滴就會死,但是需要一月毒發,請問最少需要多少老鼠才能找到那瓶有毒的水。
- 1000瓶藥水,1瓶有毒,老鼠毒發24h,如何用最少的老鼠在24h內找出毒藥。
- …
反正老鼠就不是立馬死(老鼠:我太難了)。所以在實際可行的情況下,無法利用1只老鼠測出哪瓶水有毒。
這個時候就需要動點腦筋了。如果你瞭解布隆過濾器,那麼這個問題對你來說,是比較輕鬆的事情(思路可借鑑呀)。
這道智力題,重在考察你對二進制生活中的場景的應用。
我們知道 2的10次方等於1024,1024以內的所有自然數都可以用10個數位的二進制數表示出來。1000 <= 1024。那就好辦了,
我們將1000瓶水從water[0]到water[999]分別進行編號,並轉化成10個數位的二進制數。
9 8 7 6 5 4 3 2 1 0 位數
0 0 0 0 0 0 0 0 0 0 對應編號0
0 0 0 0 0 0 0 0 0 1 對應編號1
1 1 1 1 1 0 0 1 1 1 對應編號999
我們將10只老鼠從mouse[0]到mouse[9]進行編號
- 讓第mouse[0]只老鼠喝第0位爲1的水
- 讓第mouse[1]只老鼠喝第1位爲1的所有的水
- 讓第mouse[2]只老鼠喝第2位爲1的所有的水
- 依次類推
最後可以根據老鼠的死亡情況,推算出編號n。從mouse[0]到mouse[9] 活着的老鼠對應位爲0,死了的老鼠對應位爲1。