一千瓶酒有一瓶酒有毒药,问你最少用多少只老鼠可以找出那瓶毒酒? 老鼠毒发的时间在两小时内,要求在两个小时内找出毒酒。

题目: 一千瓶酒有一瓶酒有毒药,问你最少用多少只老鼠可以找出那瓶毒酒? 老鼠毒发的时间在两小时内,要求在两个小时内找出毒酒。

public class Demo03 {
public static void main(String[] args) {

	 分析:
	 这个题是一种映射关系:要求没一种老鼠死的状况对应一瓶酒,
	 又因为老鼠只有两种状态,所以老鼠的死亡状况可以二进制数表示,
	 那么现在就把问题转化成:最少多少位二进制数能唯一标识一千瓶酒,
	 因2^9<1000<2^10
	 所以最少十只老鼠。
	 我们需要列举每只老鼠喝哪些酒?
	 因为2^10=1024>1000,
	 所以喝酒方式不唯一。
	  */		  
	int mouse=10;//十只老鼠
	int liquor=1000;//一千瓶酒
	for(int j=0;j<mouse;j++){
		int a=(int) Math.pow(2,j);
		System.out.println("第"+(j+1)+"只老鼠要喝的酒的编号:");
	for(int i=a;i<=liquor;i++){
		if((i/a)%2==1)
		System.out.print(i+",");		
	}
	System.out.println();
	}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值