Skip to content

Latest commit

 

History

History
40 lines (27 loc) · 1.2 KB

File metadata and controls

40 lines (27 loc) · 1.2 KB

9.白鼠与毒酒的算法问题。

原文链接

设有 N 桶酒,有一桶是毒酒,编号从0N-1,最少要 K 只白鼠,显然:

当N=2,K=1 
当N=3,K=2 
当N=4,K=2 
4桶酒编号0123 
K=2,设有白鼠A和白鼠B 
A喝0,1,B喝0,2 
一星期后,有4种可能状态 
A死B死(0号有毒),A死B活(1号有毒),A活B死(2号有毒),A活B活(3号有毒) 

猜想白鼠的最终状态只有死活两种可能,通过白鼠一星期后的状态可以算出毒酒编号

很自然想到二进制,例如:

当N=4时,0=00,1=01,2=10,3=11 
当N=8,K=3 
0=000,1=001,2=010,3=0114=1005=1016=1107=111 
白鼠A,B,C 
A喝0123 (0XX) 
B喝0145 (X0X) 
C喝0246 (XX0) 
ABC的最终状态可以确定毒酒编号 
当N=1000时,可以类推至少要10只,你可以这样推出这10只白鼠具体是喝哪些编号的酒,规律很明显了 

回过来再想想,1000之内的任意一个数都可以用一个10位的二进制数表示(不够的话前面补0),白鼠与数位对应,第几位为0,则说明第几位的白鼠死了,而这个二进制的编号即为毒酒编号