对于出现的题目:有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%
原文:http://sts609.blog.51cto.com/11227442/1749371