题目: 一千瓶酒有一瓶酒有毒药,问你最少用多少只老鼠可以找出那瓶毒酒? 老鼠毒发的时间在两小时内,要求在两个小时内找出毒酒。
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();
}
}
}