老鼠喝葯問題的解法


    今天又遇見一個有趣問題,有趣就會分享。

    和往常一樣,當然是我自認為這個題目有意思,有研究的價值。題目如下:

“32瓶液體,1瓶有毒,老鼠喝了1小時死亡,用1小時確定至少30個瓶子無毒,至少需要多少老鼠。”

    我的解法如下:

    又是一個求最優解的問題。這個問題需要把一個老鼠能使用的信息用到極致,即能達到最優解。首先假設n個老鼠最多可以很明確地確定f(n)瓶液體中的那瓶毒葯

那么

1、對於這n個老鼠,每個老鼠各自喝一瓶液體,可以確定C(n,1)瓶液體中的唯一一瓶毒葯。

2、在1所能確定的數目基礎上,將n個老鼠兩兩組合后,每個組合各喝一瓶液體,則有C(n,2)種組合,可以多確定C(n,2)瓶液體。

3、在1、2所能確定的數目基礎上,將n個老鼠三三組合后,每個組合各喝一瓶液體,則有C(n,3)種組合,可以多確定C(n,3)瓶液體。

……

n、在[1,n-1]所能確定的數目基礎上,所有n個老鼠喝一瓶液體,則有C(n,n)種組合,可以多確定C(n,n)瓶液體。

那么,f(n) = C(n,1) + C(n,2) + ...... + C(n,n) = 2^n;

已知,f(n) = 32, 解得n = 5。

也就是說,最少5只老鼠可以確定32瓶液體中,哪一瓶是毒葯。(注意,這里是明確確定了毒葯所在)

 

但問題要求的僅僅是:”至少30個瓶子無毒“。

對於這個問題,並按照上面的解法,僅僅需要4只老鼠即可。並按照上面的過程,給出具體過程如下:

4只老鼠一字排開  並且把32瓶液體,兩兩綁定在一起,則變成了16大瓶。
第1大瓶液體, 二進制0001 ,給第1個老鼠喝    (4個老鼠,對應4個位置,給對應位置為1的老鼠喝)
第2大瓶液體,二進制0010  給第2個老鼠喝
第3大瓶液體,二進制0011  給第1、2個老鼠喝

......

第15大瓶液體,二進制1111  給第1、2、3、4個老鼠喝
第16大瓶液體(可以理解成第0瓶液體,對應於二進制 0000),不給任何老鼠喝。

一個小時后,如果有老鼠死了,則把對應的位置填1,沒死則填0,這樣可以在一小時后,得出一個二進制數值,這個二進制數值,可以一一對應於上面的方式,找到對應的液體。

例如,第1、2個老鼠死了,3、4號老鼠沒死。得到二進制數為 0011,對應第3大瓶液體有毒。這樣確定了其它30瓶液體是無毒的,完成目標。

再如:沒有任何老鼠死亡,得到二進制數 0000,即第16大瓶液體有毒。剩下其它的30瓶液體無毒,完成目標。

 

這個題和上一篇《丟雞蛋問題的解法》一樣,都是用了數學思維對題目進行分析、並在先得到最終答案后,反推出具體解題過程。分享的並不僅僅是某個具體問題的解法,而是想向各位說明一類問題的解題思路。

 

謝謝大家看到最后,本人水平有限,如有失誤之處歡迎指點。本人郵箱 rongguozhen@foxmail.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM