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

"小阳", 医生, 
"小刚",医生 
"小地", 医生, ;
"小温", 律师, 
"小红", 律师, 
"小丽", 律师,

小阳妹妹是小地和小红

小丽哥哥是小刚,小温,

小阳的女朋友是小丽

这六个人里的一个人杀了其余五个人中的一个人。
(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;
                }}}}}

输出结果为:

凶手是:小阳
受害人是:小刚
凶手是:小刚
受害人是:小阳

转载于:https://www.cnblogs.com/reachlins/p/6559284.html

逻辑推理题:谁是凶手相关推荐

  1. C语言逻辑推理题谁是凶手

    C语言逻辑推理题谁是凶手 假定一个岛上住着三类人:骑士.无赖和普通人(也称为间谍).骑士总是说真话,无赖总是说假话,普通人有时说谎话有时说真话.侦探为了调查一宗罪案,而询问了岛上的三个人,小An,小Z ...

  2. JAVA逻辑推理题1-谁是凶手

    有六个人,姓名职业如下: "小阳", 医生,  "小刚",医生  "小地", 医生, ; "小温", 律师,  &quo ...

  3. C语言--确定到底谁是凶手

    ·原题 ·日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯 的一个.以下为4个嫌疑犯的供词. A说:不是我. B说:是C. C说:是D. D说:C在胡说 已知3个人说了真话,1个人说的 ...

  4. 互联网公司笔试-逻辑推理题及解答【精选100道】

    互联网公司笔试-逻辑推理题及解答[精选100道] [1]假设有一个池塘,里面有无穷多的水.现有2个空水壶,容积分别为5升和6升.问题是如何只用这2个水壶从池塘里取得3升的水. 由满6向空5倒,剩1升, ...

  5. c语言期末考试压轴编程题——猜凶手、猜名词、喝汽水、水仙花数

    目录 C语言大一期末必考压轴编程题 几道C语言初阶学习必考题,尤其最后一道打印水仙花数,C语言期末考试必备大题,不要错过!!! 以下个人思路仅供参考,如有更优算法,欢迎评论! 目录 一.猜凶手 题目: ...

  6. 【朝花夕拾C语言】:C语言,猜猜谁是凶手?

    文章目录 前言 第一道题目:猜猜四个人谁是凶手? 1.1题目简介 1.2分析逻辑 1.3代码实现 第二道题目:判断五个人的名次 2.1 题目简介 2.2分析逻辑 2.3代码实现 总结 前言 距离上次写 ...

  7. 面试、逻辑推理题(一) 诚实者问题、财富问题、病狗问题

    关于逻辑推理题:诚实者问题,财富问题,病狗问题的解题思路和回答,如果有更好的方法或者有质疑请评论提出,欢迎大家发表不同的见解供我学习参考,谢谢 ps:如果有一些有趣的逻辑题也可以告诉我哦 1. 诚实者 ...

  8. python考试编程题九道_一道逻辑推理题的程序实现(纯属娱乐)

    一份逻辑推理题的程序求解(纯属自娱自乐) 闲来无聊,看到QQ空间上转载了一份变态推理题的,至少表示我看了十多分钟无处下手,认识的人中有大神居然真的做出来了...我不知道他是们那么做的,不过作为编程爱好 ...

  9. C语言数理逻辑题目,数学逻辑推理题整理,看看你能答对多少

    年龄的秘密 A.B.C三人的年龄一直是一个秘密.将A的年龄数字的位置对调一下,就是B的年龄;C的年龄段两倍是A与B两个年龄的差数;而B的年龄是C的10倍. 请问:A.B.C三人的年龄各是多少? 失误的 ...

最新文章

  1. avplayer VS2008编译
  2. java 数据聚合_Java数据聚合问题请教?
  3. 【VMware vSAN 6.6】2.1.带有本地存储的服务器:vSAN硬件服务器解决方案
  4. C 语言编程 — 大小端区分
  5. 读javascript高级程序设计11-事件
  6. 不同组织间的邮件收发
  7. Vulkan Video实现GPU加速视频编码/解码
  8. getAndIncrement中使用cas
  9. Max retries exceeded with url 解决方案
  10. 智能终端会议系统(15)---视频会议十大开源编解码项目排行
  11. mysql5.7 至少需要1560,mysq5.7.28配置innodb_page_size错误引起的错误1071(42000)
  12. 如何打破线下流量瓶颈?三四线城市实体门店的生存之道
  13. 腾讯离职领导的建议:如果可以,去做大数据,不要做报表
  14. 计算机审计实验一计划阶段,审计实验1.ppt
  15. 远程桌面控制软件Teamviewer免费版安装
  16. java分析内存泄露工具_AIL-Framework下载-java内存泄露分析工具(Information Analysis Leaks)-东坡下载...
  17. 关于写javaweb项目,遇到的问题:三层架构
  18. 分享怎么才能防止域名被劫持
  19. 渣渣渣变渣渣系列(1)
  20. Linux 1.debain 忘记root密码(修改root密码)2.debian 默认不允许 root 登录 解决办法 3.终端快捷键的设置 (超级详细)

热门文章

  1. [转]PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法
  2. Matplotlib数据可视化高级
  3. 外网访问8080以及80端口失败问题解决
  4. (五)carla中世界坐标系与相机坐标系、像素坐标系变换
  5. java .class文件为什么以CAFEBABE开头?
  6. PTA 7-63 黑白子交换棋局
  7. 淘宝母婴用品数据分析
  8. 用m1 pro的MacBook Pro,安装 Anaconda arm 图形版
  9. Linux学习之centos 7 ping百度无法ping通
  10. 栾云开 作业 笔记