逻辑判断问题(java版)



/**
猜测产品质量评奖 

【问题】5家工厂的产品在一次评比中分获1,2,3,4,5,在公布结果前,已知E
        厂产品肯定不是第二、三名,五厂代表猜测评比结果,
          A厂的代表说:E厂一定能获得第一名。
          B厂的代表说:我厂的产品可能获第二名。
          C厂的代表说:A厂的产品质量最次。
          D厂的代表说:C厂的产品不是最好的。
          E厂的代表说:D厂的产品会获得第一名。

        公布结果后,证明只有产品获第一名和第二名的两个厂的代表猜对了。
        求5个厂产品各获第几名。

【答案】    A  B   C   D   E
          5  2   1   3   4  
  
         
 谁获冠军? 

【问题】甲乙丙丁戊五个人在运动会上分获百米、二百米、跳高、跳远和铅球冠军,有
        四个人猜测比赛结果:
          A说:乙获铅球冠军,丁获跳高冠军。
          B说:甲获百米冠军,戊获跳远冠军。
          C说:丙获跳远冠军,丁获二百米冠军。
          D说:乙获跳高冠军,戊获铅球冠军。
        其中每个人都只说对一句,说错一句。求五人各获哪项冠军。
【算法】用1,2,3,4,5分别代表百米、二百米、跳高、跳远和铅球5个项目,用a,b,c,d,e
        分别代表五人。如b=3 表示乙获跳高冠军。用多重循环穷举出来。
【答案】  甲  乙  丙  丁  戊
        1  2  4  3  5
         
 
  谁是小偷? 
  
【问题】有A、B、C、D四名偷窃嫌疑犯,其中一人是小偷,审问中,
A说:“我不是小偷”,
B说:“C是小偷”,
C说:“小偷肯定是D”,
D说:“C在冤枉人”,
有三人说真话,一人说假话,问到底谁是小偷?

【答案】 C

 
*/



public class LogicProblem {
    
    
int a,b,c,d,e;
    
    
public LogicProblem()
    
{
        WhoWillWin();
        WhoIsChampion();
        WhoIsThief();
    }

    
    
public void WhoWillWin()
    
{
        
int truelogic;
        
for(a=1;a<=5;a++)
            
for(b=1;b<=5;b++)
                
for(c=1;c<=5;c++)
                    
for(d=1;d<=5;d++)
                    
{
                        truelogic
=0;
                        e
=15-a-b-c-d;
                        
if((e!=2&&e!=3)&&(a*b*c*d*e==120))
                        
{
                                
//所有可能的条件罗列出来,只有两个正确
                                if(e==1)
                                    truelogic
++;
                                
if(b==2)
                                    truelogic
++;
                                
if(a==5)
                                    truelogic
++;
                                
if(c!=1)
                                    truelogic
++;
                                
if(d==1)
                                    truelogic
++;
                                
if(truelogic==2)
                                
{
                                   
//进一步罗列成立条件,只有两个是正确的
                                   if((e==1)&&((a<=2)))
                                       truelogic
++;
                                   
if(b==2)
                                       truelogic
++;
                                   
if((a==5)&&((c<=2)))
                                       truelogic
++;
                                   
if((c!=1)&&((d<=2)))
                                       truelogic
++;
                                   
if((d==1)&&((e==2)))
                                       truelogic
++;
                                   
if(truelogic==4)
                                      System.out.println(
"WhoWillWin--a:"+a+" b:"+b+" c:"+c+" d:"+d+" e:"+e);
                                }

                        }

                    }

    }


    
public void WhoIsChampion()
    
{
        
for(a=1;a<=5;a++)
            
for(b=1;b<=5;b++)
                
for(c=1;c<=5;c++)
                    
for(d=1;d<=5;d++)
                    
{
                            e
=15-a-b-c-d;
                            
if((a*b*c*d*e==120)&&((b==5)||(d==3))&&((a==1)||(e==4))&&((c==4)||(d==2))&&((b==3)||(e==5)))
                              System.out.println(
"WhoIsChampion--a:"+a+" b:"+b+" c:"+c+" d:"+d+" e:"+e);
                    }

    }


    
public void WhoIsThief()
    
{
        
int truelogic;
        
for(a=1;a<4;a++)
        
{
                truelogic
=0;
                
if(a!=1)
                  truelogic
++;
                
if(a==3)
                  truelogic
++;
                
if(a==4)
                  truelogic
++;
                
if(a!=4)
                  truelogic
++;
                
if(truelogic==3)
                
{
                     System.out.println(
"WhoIsThief--a:"+a);
                }

        }

    }

    
    
public static void main(String[] args)
    
{
        
new LogicProblem();
    }


}

原文地址:https://www.cnblogs.com/bluespot/p/875660.html