小鼠试毒:
一千个瓶子里有一瓶毒药,十只小鼠(小鼠个数至少满足瓶子总数二进制位数时)
将每个瓶子的序号转换成二进制,二进制位数依次与小鼠序号相对应,当二进制某一位为1时,喂给位数对应序号的小鼠,最后将死去小鼠的序号位数与二进制对应,死去为1活着为0,得一二进制数,转换为十进制即为有毒瓶子序号。
具体代码:
//小鼠试读,10只小鼠,一瓶毒药,小鼠一旦中毒即死,如何判断出1000瓶中哪一瓶有毒 #include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> //#define M 99long decToBin(int M) {long c=0;int i;for(i=0;M!=0;i++){int a=0;a= pow(10,i) ; c=a*(M%2)+c; M=M/2; }return c; } void feedmouse(char *mouse[10],int M) {int i=0;long a,c;for(i=0;i<=1000;i++){a=decToBin(i) ;c=decToBin(M) ;int b;if(a==c) {for(b=0;b<=9;b++){if(a%10==1){mouse[b]="death ";//字符串赋值时,自己输入"