当前位置: 首页 > news >正文

谁是嫌疑犯问题

问题描述:

6名犯罪嫌疑人ABCDEF,已知如下事实:

AB至少有1人作案;

AEF三人中至少有2人参与作案;

AD不可能是同案犯;

BC或同时作案,或与本案无关;

CD中有且仅有1人作案;

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

此题为多人作案(也可能仅一个作案),每人都有作案(1)和不作案(0)两种情况,枚举各人是否作案,再用事实来判定是否符合事实,如符合则输出作案人。

解题思路:

此题关键是怎样将文字描述的事实转变为计算机可能处理的条件式,同时满足题目给出的六条事实

如果用0表示不参与作案(简称不作案)1表示参与作案(简称作案),则:

1条事实:A+B1;至少1人作案

2条事实:A+B+F2;至少2人作案

3条事实:A*D=0,或A+D1;不可能是同案犯

4条事实:B=CB作案C也作案,B不作案C也不作案,

5条事实:C+D=1;有且仅有1人作案,即1人作案,另1人不作案

6条事实:DE;只要D不作案,E也不作案

下面是用枚举法遍历所有可能出现的罪犯组合,挑选出符合条件的组合。

完整程序如下:

'''问题描述:有6名犯罪嫌疑人A、B、C、D、E、F,已知如下事实:
A、B至少有1人作案;
A、E、F三人中至少有2人参与作案;
A、D不可能是同案犯;
B、C或同时作案,或与本案无关;
C、D中有且仅有1人作案;
如果D没有参与作案,则E也不可能参与作案。请推理出谁作了案。
'''
suspects = ['A', 'B', 'C', 'D', 'E', 'F']
criminal_dict = {0: '未参与作案', 1: '参与作案'}
n = 0
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 <= 1) \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(f'第{n+1}种作案方案:')for i in result:print(f'{i[0]}: {i[1]}')n = n + 1
print(f'\n总共有{n}种作案方案。')

运行结果:

http://www.lryc.cn/news/295430.html

相关文章:

  • Netty中使用编解码器框架
  • 【漏洞复现】斐讯FIR151M路由器未授权下载漏洞
  • 【SpringBoot】application配置(5)
  • Linux安全技术与iptables防火墙
  • QT QCombox 样式表 比起作用
  • 在 Windows 10 上使用 Visual Studio 2022 进行 C++ 桌面开发
  • 如何安装x11vnc并结合cpolar实现win远程桌面Deepin
  • C++基础入门Day1
  • 【高质量精品】2024美赛A题22页word版成品论文+数据+多版本前三问代码及代码讲解+前四问思路模型等(后续会更新)
  • Spark context stopped while waiting for backend
  • 保研机试算法训练个人记录笔记(三)
  • 2月6日作业
  • rust给py写拓展如此简单
  • 白嫖10款游戏加速器,一年都不用开会员!
  • Kafka SASL_SSL双重认证
  • css新手教程
  • spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用
  • web前后端小坑记录
  • 股票K线简介
  • 路由器、路由器的构成、交换结构
  • 【Mysql】整理
  • 项目02《游戏-08-开发》Unity3D
  • 【数据库原理及应用】简答题归纳总结
  • 通过无线打通两个路由器
  • idea 配置文件,中文出现乱码如何解决
  • 网络协议梳理
  • 14. 【Linux教程】文件压缩与解压
  • ruoyi-nbcio中xxl-job的安装与使用
  • 从零学算法162
  • 5.0 ZooKeeper 数据模型 znode 结构详解