用python写了一个解法。
凶手是谁
小阳的妹妹是小蒂和小红;他的女友叫小丽。小丽的哥哥是小刚和小温。他们的职业分别是:
小阳:医生
小刚:医生
小蒂:医生
小温:律师
小红:律师
小丽:律师
这6人中的一个杀了其余5人中的一个。
(1)假如这个凶手和受害者有一定的亲缘关系,那么说明凶手是男性;
(2)假如这个凶手和受害者没有一定的亲缘关系,那么说明凶手是个医生;
(3)假如这个凶手和受害者的职业一样,那么说明受害者是男性;
(4)假如这个凶手和受害者的职业不一样,那么说明受害者是女性;
(5)假如这个凶手和受害者的性别一样,那么说明凶手是个律师;
(6)假如这个凶手和受害者的性别不一样,那么说明受害者是个医生。
根据上面的条件,请问凶手是谁?
提示:根据以个陈述中的假设与结论,判定哪3个陈述组合在一起不会产生矛盾。
写了个代码来判断这个逻辑:
# -*- coding: utf-8 -*-
class person():
def __init__(self,_name,_sex,_career):
self.name_ = _name
self.sex_ = _sex # 1 male 2 female
self.career_ = _career # 1 doctor 2 career
self.relation_map_ = {}
def create_relationship(self,_other):
if self.have_relationship(_other):
return
self.relation_map_[_other.name_]=True
_other.create_relationship(self)
def have_relationship(self,_other):
return self.relation_map_.has_key(_other.name_)
def is_male(self):
return self.sex_ == 1
def is_female(self):
return not self.is_male()
def is_doctor(self):
return self.career_ == 1
def is_lawyer(self):
return self.career_ == 2
def logic1(murder,victim):
if murder.have_relationship(victim):
return murder.is_male()
else:
return murder.is_doctor()
def logic2(murder,victim):
if murder.career_ == victim.career_:
return victim.is_male()
else:
return murder.is_lawyer()
def logic3(murder,victim):
if murder.sex_ == victim.sex_:
return murder.is_lawyer()
else:
return victim.is_doctor()
if __name__ == "__main__":
d1 = person('小阳',1,1)
d2 = person('小刚',1,1)
d3 = person('小蒂',2,1)
l1 = person('小温',1,2)
l2 = person('小红',2,2)
l3 = person('小丽',2,2)
d1.create_relationship(d3)
d1.create_relationship(l2)
d1.create_relationship(l3)
l3.create_relationship(d2)
l3.create_relationship(l1)
all_member = []
all_member.append(d1)
all_member.append(d2)
all_member.append(d3)
all_member.append(l1)
all_member.append(l2)
all_member.append(l3)
loop = 0
for i in range(0,6):
for j in range(0,6):
loop += 1
if i == j:
continue
m = all_member[i]
v = all_member[j]
if not logic1(m,v):
continue
if not logic2(m,v):
continue
if not logic3(m,v):
continue
print('loop: %d'%loop)
print("murder is: %s"%m.name_)
print("victim is: %s"%v.name_)