问题
“医院里的医务人员,包括我在内,总共是16名医生和护士。下面讲到
的人员情况,无论是否把我计算在内,都不会有任何变化。在这些医务人员
中:
(1)护士多于医生。
(2)男医生多于男护士。
(3)男护士多于女护士。
(4)至少有一位女医生。”
这位说话的人是什么性别和职务?
分析
因为是小规模问题,适合用暴力破解法。枚举所有情况,找出符合规则的。此类问题都可以用这种方法。
代码
import copy
satisfied_tuple = []
for male_doctor in range(0, 17 ):
for male_nurse in range(0, 17 ):
for female_nurse in range(0, 17 ):
for female_doctor in range(0, 17 ):
rule = [(male_nurse + female_nurse) > (male_doctor + female_doctor)
,male_doctor > male_nurse
,male_nurse > female_nurse
,female_doctor >= 1
,male_doctor + male_nurse + female_nurse + female_doctor == 16 ]
result = reduce( lambda x,y:x and y,rule)
if result:
satisfied_tuple.append([male_doctor,female_doctor,male_nurse,female_nurse])
roles = [ ' male_doctor ' , ' female_doctor ' , ' male_nurse ' , ' female_nurse ' ]
for tuple in satisfied_tuple:
for i in range(len(tuple)):
new_tuple = copy.copy(tuple)
new_tuple[i] -= 1
male_doctor,female_doctor,male_nurse,female_nurse = new_tuple
new_rule = [(male_nurse + female_nurse) > (male_doctor + female_doctor)
,male_doctor > male_nurse
,male_nurse > female_nurse
,female_doctor >= 1
# ,male_doctor+male_nurse+female_nurse+female_doctor==16
]
result = reduce( lambda x,y:x and y,new_rule)
if result:
print roles[i]
结果
输出结果是: 女护士