小代码   二进制位处理事情

对于出现的题目:有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%


你可能感兴趣的:(小代码)