小白鼠試藥問題。

在某次面試的時候遇到的問題,如下:一千瓶藥裏只有一瓶有毒,一週後毒發。用10只老鼠試藥,要怎樣才能檢測出有毒的那瓶藥?

我一開始以爲每隻老鼠只能喝一瓶藥,所以想了很久都沒有想出來,後來參考:

http://zhidao.baidu.com/link?url=q_w2eqyptqobnl0gPRzeE9Q9ScoJyJJWi7XLwPRIApWR3fCQu_svD1naluRGKK1EZo0f6vJ8VFLWT6Pe3cnHf_

http://bbs.csdn.net/topics/370210548

http://tieba.baidu.com/p/1662492456#

這個不錯哦:http://dong008259.blog.163.com/blog/static/51645417201192911561141/

纔想明白了。下面以3只老鼠檢測8瓶藥爲例講解:

每瓶藥依次編號爲000,001,010,011,100,101,110,111右邊爲低位

共有3只老鼠,第一隻老鼠喝所有第一位(從右開始)爲1的藥,即喝第1,3,5,7瓶藥;第二隻老鼠喝所有第二位爲1的藥,即喝第2,3,6,7瓶藥;第三隻老鼠喝所有第三位(從右開始)爲1的藥,即第4,5,6瓶藥。

一星期之後,如果某隻老鼠死,標記爲1,活標記爲0。則如果第1只老鼠活,第2,3,只老鼠都死了,即110=6說明第6瓶要是毒藥,其他都是無毒的。

因爲第1只老鼠活的,而第一隻老鼠只喝了1,3,5,7瓶藥,說明第1,3,5,7瓶藥是無毒的,第2,3,只老鼠是死的,而第2只老鼠只喝了2,3,6,7瓶,第3只老鼠只喝了4,5,6瓶,交集即爲第6瓶藥。所以第6瓶要是毒藥。


易知,根據二進制編碼,3只老鼠共可以編碼2^3=8種,所以可以檢測8種藥。如果是10只老鼠,可以檢查2^10=1024瓶藥。


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