為了充分利用這些死囚,大家肯定需要多嘗試幾桶酒。所以對於死囚來說,每瓶酒有喝和不喝兩種選擇,我們分別記為0和1。然後,對於每個死囚,將生成壹個10位的二進制數。假設所有犯人都不喝酒,按如下圖橫向排列:
葡萄酒1 2 3 4 5 6 7 8 9 10
死囚1 0 0 0 x 1 0 0 0 0
死刑犯2 0 0 0 0 0 x2 0 0 0 0
死囚3000000X30000
......
死刑囚犯n 0 0 0 0 0 xn 0 0 0 0
如上圖,如果我們站起來看,每壹列的二進制數據決定了哪些死囚應該喝壹桶酒。
例如,(x1,x2,x3,...上圖中的,xn)是指對於第6桶酒,如果xn=0,死刑犯n不需要喝,如果xn=1,死刑犯n需要喝。
所以如果要找出死刑犯數量最少的毒酒,需要10組不同的二進制數(壹樣是沒有意義的)。
那麽如果需要10組不同的二進制數,至少需要多少位呢?顯然,需要四個,簡要列舉如下:
葡萄酒1 2 3 4 5 6 7 8 9 10
死囚1000000111
死囚20001 1 1 1 000。
死囚301001001001
4 1 1 1 1 1 1 0.
結果很明顯,如果桶1有毒,只有死囚4號死了。妳可以自己嘗試其他情況。
當然後面是四位二進制,所以死囚四人其實最多能找出被下毒的1桶酒。
好了,現在10桶酒裏有兩桶被下毒了,怎麽辦?
答案很簡單。10桶中,1桶中毒,有10例。
然而,有10x9/2 = 45個案例,其中10桶中有2桶中毒。
換句話說,只要我有足夠多的不同的二進制數來代表至少45種不同的情況,我就可以找到中毒的2桶酒。
所以至少需要六個死刑犯才能從10桶中找出兩桶毒酒。
好了,現在大家應該都清楚了。壹般意義上,這個問題可以是以下幾種。
有m桶酒在n桶酒裏下毒(m
答案是下面不等式中x的最小值。
2^x & gt;n!/((n-m)!m!)
所以原問題的答案是2^x > 1000x999/2?6?0x & gt;= 19