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

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

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();
	}
}

}

猜你喜欢

转载自blog.csdn.net/qq_33271461/article/details/84965838