python是谁_谁是嫌疑犯问题Python枚举法

原文:https://blog.csdn.net/yunzifengqing/article/details/81941592

问题描述:有6名犯罪嫌疑人A、B、C、D、E、F,已知如下事实:

A、B至少有1人作案;

A、E、F三人中至少有2人参与作案;

A、D不可能是同案犯;

B、C或同时作案,或与本案无关;

C、D中有且仅有1人作案;

如果D没有参与作案,则E也不可能参与作案。请推理出谁作了案。

下面是人工逻辑推理:

假设1:A参与作案,则

B可能参与作案(A、B至少有1人作案);

E、F至少有1人参与作案(A、E、F三人中至少有2人参与作案);

D未参与作案(A、D不可能是同案犯);

C参与作案(C、D中有且仅有1人作案);

B参与作案(B、C或同时作案,或与本案无关);

E未参与作案(如果D没有参与作案,则E也不可能参与作案);

F参与作案(A、E、F三人中至少有2人参与作案),结果:A、B、C、F参与作案,D、E未参与作案。

假设2:A未参与作案,则

B参与作案(A、B至少有1人作案);

E、F参与作案(A、E、F三人中至少有2人参与作案);

C参与作案(B、C或同时作案,或与本案无关);

D未参与作案(C、D中有且仅有1人作案);

E未参与作案(如果D没有参与作案,则E也不可能参与作案);

E既参与作案又未参与作案,出现矛盾,假设不成立;

下面是用Python处理的解题思路:用枚举法遍历所有可能出现的罪犯组合,挑选出符合条件的。

suspects = ['A', 'B', 'C', 'D', 'E', 'F']criminal_dict = {0: 'innocent', 1: 'guilty'}n = 1

for a in range(0, 2):

for b in range(0,2):

for c in range(0,2):

for d in range(0,2):

for e in range(0,2):

for f in range(0,2):

if (a + b >= 1) and (a + e + f >= 2) and (a * d == 0) and (b != c) and (c + d == 1) and (d >= e):

result = zip(suspects, [criminal_dict[a], criminal_dict[b], criminal_dict[c], criminal_dict[d], criminal_dict[e], criminal_dict[f]])

#print(a,b,c,d,e,f)

print ("第%d种作案方案:" %(n))

print(list(result))

n = n + 1

print("总共有%d种作案方案" %(n-1))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值