c语言(小鼠试毒 二进制练习)

小鼠试毒:

        一千个瓶子里有一瓶毒药,十只小鼠(小鼠个数至少满足瓶子总数二进制位数时)

        将每个瓶子的序号转换成二进制,二进制位数依次与小鼠序号相对应,当二进制某一位为1时,喂给位数对应序号的小鼠,最后将死去小鼠的序号位数与二进制对应,死去为1活着为0,得一二进制数,转换为十进制即为有毒瓶子序号。

具体代码:

//小鼠试读,10只小鼠,一瓶毒药,小鼠一旦中毒即死,如何判断出1000瓶中哪一瓶有毒 
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
//#define M 99

long 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\0";
					//字符串赋值时,自己输入"\0",scanf输入时可不用添加;
					//输出“%c”单个输出,“%s”连续输出; 
				}
					a=a/10;
			}	
		}
	}
} 
int find(char *mouse[10])
{
	int i;
	int a;
	for(i=0;i<10;i++)
	{
		if(mouse[i]=="death\0")
		{
			printf("第%d只小鼠中毒\n",i+1);
			//测试得中毒小鼠序号与毒药序号的二进制位数一致 
			
			a=a+pow(2,i);		
		} 
	
	}
		printf("第%d瓶是毒药\n",a);	

}
int main()
{
	char *mouse[10];
	long s; 
	int M;
	//M=rand();随机数固定为41 
	srand(time(0)) ;//取随机数 
	M=rand()%1001;//随机数范围(0-1000)
	
/*范围方法 
	M=rand()%(a+1);       (0~a) 
	M=a+rand()%(b-a+1);   (a~b)
*/
	 

	s=decToBin(M);
	printf("%ld\n",s);
	feedmouse(mouse,M);
	find(mouse);
	return 0;
}
 

 细节:

#include<stdlib.h>
#include<time.h>

int M;
    //M=rand();随机数固定为41 
    srand(time(0)) ;//取随机数 
    M=rand()%1001;//随机数范围(0-1000)
    
/*范围方法 
    M=rand()%(a+1);       (0~a) 
    M=a+rand()%(b-a+1);   (a~b)
*/

此部分算法为计算机自取随机数,随机数函数及范围
      

定义字符串:    

char *mouse[10];

字符串赋值:

 mouse[b]="death\0";
                    //字符串赋值时,自己输入"\0",scanf输入时可不用添加;
                    //输出“%c”单个输出,“%s”连续输出,无"\0";

输出:

printf("第%d只小鼠中毒\n",i+1);

幂指数函数:

#include<math.h>

int a=0;

a= pow(10,i) ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值