老鼠,找毒酒,二进制算法

有1000瓶酒,其中有1瓶毒酒,喝了一天毒发身亡。现在有10只老鼠,1天找出这瓶毒酒。

package binarysystem;
import java.util.Arrays;
/*有1000瓶酒,里面有一屏瓶毒酒喝了1天后就死,用10只老鼠一天找出这瓶毒酒。方法把酒的编号化为二进制数,个位为1的给10号老鼠喝,十位为1的给9号老鼠喝,以此类推。然后根据老鼠的死活状态得到二进制的编码,确定毒酒编号 */
public class RatsWine{    
static final int WINE_NUMBER = 1000;    
static final int MOUSE_NUMBER = 10;   
 public static void main(String[] args)   
  {      
    Wine[] wine = new Wine[WINE_NUMBER];        
    Mouse[] mouse = new Mouse[MOUSE_NUMBER];      
      int[] mouseLifeOrDie=new int[10];      
      for(int i=0;i<WINE_NUMBER;i++) 
      //给一千瓶酒编号            
      wine[i]=new Wine(i,true);      
        for(int i=0;i<MOUSE_NUMBER;i++)
        //给老鼠编号           
         mouse[i]=new Mouse(i,true);      
          int x=(int)(Math.random()*WINE_NUMBER);      
            wine[x].setLifeOrdie(false);
          //放入毒酒       
          
           System.out.println("鲁迅说:第"+x+"瓶酒有毒");       
            for(int j=0;j<10;j++)//二进制第j+1位为1的酒   
                {          
                  for (int i = 0; i < WINE_NUMBER; i++)       
                  {
       //把编号变为二进制,并返回该数第j位的值,0或者1.            
                     if(toBinaryArray(i, j)==1)
//把二进制j+1位为1的酒给j+1号老鼠喝,以此类推.                    
					if(!wine[i].getLifeOrdie())          
              	mouse[9-j].setLife(wine[i].getLifeOrdie());                   
              	 //给老鼠喝酒,
              	wine[i].getLifeOrdie
             // 若为false, 则会毒死老鼠.    
                }     
                 }        
              //每瓶酒都有二进制编码,喝了后,老鼠死,可以体现毒酒二进制编码在对应的位有个1,没死体现对应位为0;       
               for(int i=0;i<MOUSE_NUMBER;i++) 
               //死老鼠代表1,活老鼠代表0。   
                    {        
                    if(mouse[i].getLife())               
                    mouseLifeOrDie[i]=0;        
                      else               
                       mouseLifeOrDie[i]=1;     
                          }    
                              int number=0;    
                                  for(int i=0;i<10;i++)
                      //将二进制数化为十进制数.   
            {         
                if (mouseLifeOrDie[i] != 0)           
                       number += Math.pow(2, 9 - i);     
                  }       
                   System.out.println("老鼠状态:");      
                   for(int i=0;i<10;i++)    
            		{       
                 System.out.print(mouse[i]);     
                    }       
 				 System.out.println("\n二进制码:"+Arrays.toString(mouseLifeOrDie));    
 				 System.out.println("所以真相只有一个!");     						     
 				System.out.println("第"+number+"瓶酒有毒!");  
  		  }   
    	 public static int toBinaryArray(int num,int j)  
       {      
        	 int x=1;       
         	 int[] binary=new int[10];     
             for(int i=0;i<10;i++)      
              {         
                  if(((num>>i)&x)==1)                         
                  	binary[9-i]=1;         
                  else if(((num>>i)&x)==0)  
                  {                      
                  binary[9-i]=0;  
           		  }     
             	 return binary[9-j];  
      }
package binarysystem;
//酒类
class Wine{   
	 private int number;//编号  
  	 private boolean poison;//ture为好酒,false为毒酒.  
     public Wine(int number,boolean poison)  
       {     
          		this.number=number;     
             this.poison = poison;  
         }  
        public void setNumber(int number)
        {       
        		 this.number=number;  
                   }  
       public int getNumber(){  
                  return number;
                } 
        public void setLifeOrdie(boolean poison)
          {       
             this.poison = poison;   
            }   
	   public boolean getLifeOrdie()
         {  
           return poison;   
         }
     }
package binarysystem;
class Mouse
 {    
 		private int mouseNumber;//老鼠编号  
  		 private boolean life;//死或生    
   		public Mouse(int mouseNumber,boolean life)
   		{     
   		  		 this.mouseNumber=mouseNumber;    
       		    	this.life = life;   
        }  
          public void setMouseNumber(int mouseNumber){      
            this.mouseNumber=mouseNumber;  
            }   
        public int getMouseNumber() {  
                   return mouseNumber;   
                    } 
          public void setLife(boolean life) { 
                             this.life = life;   
                              } 
         public boolean getLife() {  
               return life;   
                }  
               
        public String toString(){     
           return "{"+(mouseNumber+1)+"号:"+(life?"生}":"死}");  
            }
       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
.版本 2 .如果真 (ItemID = 3020193) item.Name = “[魂玉]过关斩将” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020185) item.Name = “[魂玉]七星夺窍” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020188) item.Name = “[魂玉]五情七灭阵” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020187) item.Name = “[魂玉]捅劲” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020183) item.Name = “[魂玉]乾坤日月斩” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020179) item.Name = “[魂玉]分水斩” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020181) item.Name = “[魂玉]铁马残红” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020180) item.Name = “[魂玉]夺魂·双刀” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020173) item.Name = “[魂玉]强袭·离火式” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020182) item.Name = “[魂玉]易武·万华” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020174) item.Name = “[魂玉]五毒酒” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020163) item.Name = “[魂玉]流星飞坠” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3005005) item.Name = “[装备]红甲” item.Color = #红色 返回 (item) .如果真结束 .如果真 (ItemID = 3010053) item.Name = “[道具]锻造锤” item.Color = Color_4 返回 (item)翻译成c++ if源码
05-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值