抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 逻辑推理题:谁是凶手

逻辑推理题:谁是凶手

时间:2022-03-31 09:53:38

相关推荐

有六个人,姓名职业如下:

"小阳", 医生,

"小刚",医生

"小地", 医生, ;

"小温", 律师,

"小红", 律师,

"小丽", 律师,

小阳妹妹是小地和小红

小丽哥哥是小刚,小温,

小阳的女朋友是小丽

这六个人里的一个人杀了其余五个人中的一个人。(1)如果凶手和受害者有亲缘关系,则凶手是位男性; (2)如果凶手和受害者没有亲缘关系,则凶手是位医生; (3)如果凶手和受害者职业相同,则受害者是位男性; (4)如果凶手和受害者没有相同工作,则受害者是位女性; (5)如果凶手和受害者性别不同,则凶手是位律师; (6)如果凶手和受害者性别相同,则受害者是位医生。谁是凶手?

public class FindMuderer {static enum JOB {DOCTOR, LAWYER}static enum SEX {MAN, WOMEN}static class Pepole {String name;JOB job;SEX sex;static Pepole newPepole(String name, JOB job, SEX sex) {Pepole p = new Pepole();p.name = name;p.sex = sex;p.job = job;return p;}public boolean equals(Object o) {if (o == null)return false;if (o.getClass() == Pepole.class) {if (((Pepole) o).name == this.name) {return true;}}return false;}public String toString() {return this.name;}}static class Relation {static List<List<Pepole>> pepoles = new ArrayList<List<Pepole>>();}/*** @param args* 这六个人里的一个人杀了其余五个人中的一个人。(1)如果凶手和受害者有亲缘关系,则凶手是位男性;(2)如果凶手和受害者没有亲缘关系,则凶手是位医生;(3)如果凶手和受害者职业相同,则受害者是位男性;(4)如果凶手和受害者没有相同工作,则受害者是位女性;(5)如果凶手和受害者性别不同,则凶手是位律师;(6)如果凶手和受害者性别相同,则受害者是位医生。*/public static void main(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<Pepole> lstP = new ArrayList<Pepole>();lstP.add(pa);lstP.add(pb);lstP.add(pc);lstP.add(pd);lstP.add(pe);lstP.add(pf);//定义六个人的关系,将有亲缘关系的放入一个关系集合,根据题意存在两组亲缘关系集合.List<Pepole> lstRelation1 = new ArrayList<Pepole>(); lstRelation1.add(pa);lstRelation1.add(pc);lstRelation1.add(pe);List<Pepole> lstRelation2 = new ArrayList<Pepole>(); 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(List<Pepole> lstRela: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;}}}}}

输出结果为:

凶手是:小阳

受害人是:小刚

凶手是:小刚

受害人是:小阳

如果觉得《逻辑推理题:谁是凶手》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。