谁是嫌疑犯问题Python枚举法
2024-09-07 13:34:18
原文: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))
最新文章
- ortp库入门
- Linux内核模块简介
- COJ980 WZJ的数据结构(负二十)
- zoj 2112 动态区间求第k大
- 【转】shell 教程——05 第一个Shell脚本
- Flash, Flex, Air, Flashplayer之间的相互关系是什么?
- [linux]查看机器有几个cpu,是否支持64位
- BNU Online Judge-34978-汉诺塔
- Docker打包 Asp.Net Core应用,在CentOS上运行
- REST风格下如何放行静态资源
- python - 文件系统和文件
- java集合类List
- 火狐浏览器高度&;制作简单万年历&;弹出层
- vi/vim 命令速查手册
- SpringBoot四大神器之Starter
- window10上安装python+CUDA+CuDNN+TensorFlow
- ubuntu上安装systemtap
- [Java.web]Web应用结构
- 十四、css动画基础知识
- 黑盒测试实践-任务进度-Day02