/*  逻辑推理题:谁是凶手
有六个人,姓名职业如下:

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

小阳的妹妹是小地和小红 ;
小丽的哥哥是小刚和小温 ;
小阳的女朋友是小丽 ;

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

(1)如果凶手和受害者有亲缘关系,则凶手是位男性 ;
(2)如果凶手和受害者没有亲缘关系,则凶手是位医生 ;
(3)如果凶手和受害者职业相同,则受害者是位男性 ;
(4)如果凶手和受害者没有相同工作,则受害者是位女性 ;
(5)如果凶手和受害者性别不同,则凶手是位律师 ;
(6)如果凶手和受害者性别相同,则受害者是位医生。
; Java编程语言实现:https://blog.csdn.net/weixin_30755393/article/details/98193424
*/

main:
  person:={}
  person[1] :={姓名: "小阳",职业: "医生",亲属:{},性别: "男"}
  person[2] :={姓名: "小刚",职业: "医生",亲属:{},性别: "男"}
  person[3] :={姓名: "小地",职业: "医生",亲属:{},性别: "女"}
  person[4] :={姓名: "小温",职业: "律师",亲属:{},性别: "男"}
  person[5] :={姓名: "小红",职业: "律师",亲属:{},性别: "女"}
  person[6] :={姓名: "小丽",职业: "律师",亲属:{},性别: "女"}

  person[1].亲属.小地 := person.小地
  person[1].亲属.小红 := person.小红
  for key, obj in person[1].亲属
    obj["亲属"]["小阳"] := person[1]
  
  person[6].亲属.小刚:= person.小刚
  person[6].亲属·小温:= person.小温
  for key, obj in person[6].亲属
    obj["亲属"] ["小丽"] := person[6]

  j := 0

  for i, obj in person
  {
    killer := obj
    Loop, % person.count() - i
    {
      j := i + a_index
    
      victim := person[j]
      if isTrue(killer, victim)
        msgbox % "killer【杀手】:" killer.姓名 "`nvictim【受害者】:" victim.姓名
    }
  }

return

isTrue(killer, victim) {
  if killer.亲属.haskey(victim.姓名)
    if not killer.性别 == "男"
      return false

  if not killer.亲属.haskey(victim.姓名)
    if not killer.职业 =="医生"
      return false

  if (killer.职业 == victim.职业)
    if not victim.性别 == "男"
      return false

  if not killer.职业 == victim.职业
    if not victim.性别 == "女"
      return false

  if not killer.性别 == victim.性别
    if not killer.职业 == "律师"
      return false
  
  if (killer.性别 == victim.性别)
    if not victim.职业 =="医生"
      return false

  return true
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。