今天又遇見一個有趣問題,有趣就會分享。
和往常一樣,當然是我自認為這個題目有意思,有研究的價值。題目如下:
“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