对于出现的题目:有1000瓶水,仅有一瓶有毒,老鼠喝后1天后死亡,如何用10只老鼠在最短时间确定毒水位置。

分析:对于出现的数字1,10,1000;最快确定结果,则一只一只地试就不必谈了,这里注意对数据敏感,2的10次方即是1024大于1000;所以可以确定用二进制的原理。


首先,对10只老鼠编号排一行固定好,等待喝水。

 r9 r8 r7 r6 r5 r4 r3 r2 r1 r0

 对水的编号,转二进制 比如第5瓶 为 00000 00101 对应有1的位的老鼠就喝一点。

 此时就是 r2和r0喝一点。

 如此对水测试处理(所以第一只最倒霉)。

 最后,一天后,根据各箱子里老鼠的死亡情况来判断毒水的位置。

 如果 r2 r0都死了,其他活着对应二进制00000 00101 的第5瓶果真就是有毒的。

 【仅仅学术讨论,不假定其他意外】

附带一代码: 

#include "stdio.h"

#include "stdlib.h"

#define n  100

void main()

{

 int i,j,k=n-1,kk;

 int r[n]={0};int b[n]={0};


for(i=0;i<n+1;i++)

{j=i;while(j){r[k]=j%2;j=j/2;k--;}

     for(kk=k;kk<n;kk++){if(r[kk]==1) b[kk]=b[kk]+1;}

k=n-1;

}


/*

for(i=0;i<n;i++)

printf("%2d",r[i]);

printf("\n");


*/

for(i=0;i<n;i++)

{

if(b[i]!=0)

printf("%5d",b[i]);

}

printf("\n");

}

 

/******************

 37   37   48   48   49   50   50

*******************/

数学分析出老鼠死亡概率:从r9 到r0为41% 42% 43% 44% 45% 46% 47% 48% 49% 50%