/**
猜测产品质量评奖
【问题】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();
}
}