问题
“医院里的医务人员,包括我在内,总共是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:
roles[i]
结果
输出结果是: 女护士