java判断凶手_逻辑推理题:谁是凶手

public classFindMuderer {static enumJOB {

DOCTOR, LAWYER

}static enumSEX {

MAN, WOMEN

}static classPepole {

String name;

JOB job;

SEX sex;staticPepole newPepole(String name, JOB job, SEX sex) {

Pepole p= newPepole();

p.name=name;

p.sex=sex;

p.job=job;returnp;

}public booleanequals(Object o) {if (o == null)return false;if (o.getClass() == Pepole.class) {if (((Pepole) o).name == this.name) {return true;

}

}return false;

}publicString toString() {return this.name;

}

}static classRelation {static List> pepoles = new ArrayList>();

}/***@paramargs

*

这六个人里的一个人杀了其余五个人中的一个人。

(1)如果凶手和受害者有亲缘关系,则凶手是位男性;

(2)如果凶手和受害者没有亲缘关系,则凶手是位医生;

(3)如果凶手和受害者职业相同,则受害者是位男性;

(4)如果凶手和受害者没有相同工作,则受害者是位女性;

(5)如果凶手和受害者性别不同,则凶手是位律师;

(6)如果凶手和受害者性别相同,则受害者是位医生。*/

public static voidmain(String[] args) {//定义六个人的姓名,职业,性别.

Pepole pa = Pepole.newPepole("小阳", JOB.DOCTOR, SEX.MAN);

Pepole pb= Pepole.newPepole("小刚", JOB.DOCTOR, SEX.MAN);

Pepole pc= Pepole.newPepole("小地", JOB.DOCTOR, SEX.WOMEN);

Pepole pd= Pepole.newPepole("小温", JOB.LAWYER, SEX.MAN);

Pepole pe= Pepole.newPepole("小红", JOB.LAWYER, SEX.WOMEN);

Pepole pf= Pepole.newPepole("小丽", JOB.LAWYER, SEX.WOMEN);

List lstP = new ArrayList();

lstP.add(pa);lstP.add(pb);lstP.add(pc);lstP.add(pd);lstP.add(pe);lstP.add(pf);//定义六个人的关系,将有亲缘关系的放入一个关系集合,根据题意存在两组亲缘关系集合.

List lstRelation1 = new ArrayList();

lstRelation1.add(pa);

lstRelation1.add(pc);

lstRelation1.add(pe);

List lstRelation2 = new ArrayList();

lstRelation2.add(pb);

lstRelation2.add(pd);

lstRelation2.add(pf);

Relation.pepoles.add(lstRelation1);

Relation.pepoles.add(lstRelation2);for(Pepole pModerer:lstP){//遍历可能的凶手

for(Pepole pDead:lstP){//遍历可能的受害人//6个条件按顺序氛围三组是否满足的标记.

boolean flag12 = false;boolean flag34 = false;boolean flag56 = false;boolean flagRela = false;//是否有亲缘关系

boolean flagJob = false;//是否同职业

boolean flagSex = false;//是否同性别

if(pModerer.equals(pDead)) continue;//去掉自杀现象//判断是否有亲缘关系

for(ListlstRela:Relation.pepoles){//如果两人属于任何一个亲缘关系集合,则有亲缘关系.

if(lstRela.containsAll(Arrays.asList(pModerer,pDead)))

{

flagRela= true;break;

}

}//判断是否满足条件一或二

if(flagRela && pModerer.sex.equals(SEX.MAN)){flag12 = true;}if(!flagRela && pModerer.job.equals(JOB.DOCTOR)){flag12 = true;}//判断是否职业相同

if(pModerer.job.equals(pDead.job))

flagJob= true;//判断条件3,4是否成立

if(flagJob && pDead.sex.equals(SEX.MAN)){flag34 = true;}if(!flagJob && pDead.sex.equals(SEX.WOMEN)){flag34 = true;}//判断是否性别相同

if(pModerer.sex.equals(pDead.sex))

flagSex= true;//判断条件5,6是否成立

if(flagSex && pDead.job.equals(JOB.DOCTOR)){flag56 = true;}if(!flagSex && pModerer.job.equals(JOB.LAWYER)){flag56 = true;}if(flag12 && flag34 && flag56){//所有条件满足退出查找,输出结果.

System.out.println("凶手是:" +pModerer);

System.out.println("受害人是:" +pDead);//return;

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值