谁是嫌疑犯问题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))
谁是嫌疑犯问题Python枚举法的更多相关文章
- OpenJudge计算概论-完美立方【暂时就想到了枚举法了】
/*===================================== 完美立方 总时间限制: 1000ms 内存限制: 65536kB 描述 a的立方 = b的立方 + c的立方 + d的立 ...
- 【NYOJ-187】快速查找素数—— 枚举法、筛选法、打表法
快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N ...
- Python 冒泡法排序
def sequence(disorder='', separators=''): arrays = disorder.split(separators) def desc(): for i in r ...
- Python 枚举 enum
Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...
- for循环枚举法,全排列+dfs,补充浮点数注意事项
其实这个题目我一直没想好应该叫什么,就是在做蓝桥杯的时候会遇到很多的题,给你一等式,abcdef...分别是1-9(||12||15)不重复问你有几种方案? 我之前一直都是用的for循环在做,听说这叫 ...
- 算法:枚举法---kotlin
枚举法:效率低,循环所有的情况,找到正确答案 用于解决数学问题,还是很简单的. 比如,奥数里面: 算 法 描 述 题X题=题题题题题题 其中 算法描述题每一个为一个数字,请写出正确的数字. ok,我们 ...
- 统计学习:《贝叶斯思维统计建模的Python学习法》中文PDF+英文PDF+代码
用数学工具解决实际问题仅有的要求可能就是懂一点概率知识和程序设计.而贝叶斯方法是一种常见的利用概率学知识去解决不确定性问题的数学方法,对于一个计算机专业的人士,应当熟悉其应用在诸如机器翻译,语音识别, ...
- Python之枚举法解数学题
作为初二的学生,数学题总是令我苦恼的问题.尤其是我们这里的预备班考试(即我们这里最好的两所高中提前一年招生,选拔尖子生的考试)将近,我所面对的数学题越发令人头疼. 这不,麻烦来了: 如图,在正方形AB ...
- Python 枚举
1. 枚举的定义 首先,定义枚举要导入enum模块.枚举定义用class关键字,继承Enum类.用于定义枚举的class和定义类的class是有区别. 示例代码: from enum import E ...
随机推荐
- MAC-下安装php-redis扩展
MAC下安装php-redis扩展 下载php-redis,地址:https://nodeload.github.com/nicolasff/phpredis/zip/master 下载完成得到p ...
- Android判断view在屏幕可见
/** * 判断当前view是否在屏幕可见 */public static boolean getLocalVisibleRect(Context context, View view, int of ...
- application节点
<application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...
- URL编码和解码
1. 为什么需要编码 当数据不利于处理.存储的时候,就需要对它们进行编码.如对字符进行编码是因为自然语言中的字符不利于计算机处理和存储.对图片信息.视频信息.声音信息进行压缩.优化,将其“格式化”,是 ...
- selenium 2019 笔记
1.get打开本地目录的方法
- Net分布式系统之七:日志采集系统(1)(转)
http://www.cnblogs.com/Andon_liu/p/7508107.html 日志对大型应用系统或者平台尤其重要,系统日志采集.分析是系统运维.维护及用户分析的基础. 一.系统日志分 ...
- react 添加 react-redux 基本用法
安装 yarn add react-redux 创建文件.文件夹 |- redux |- actions.js |- reducer.js |- store.js actions.js export ...
- liunx基本操作命令
1. rm 删除命令 rm -i 文件名-----------询问y/N 删除文件 rm -f 文件名-----------直接删除文件 rm -r 目录 rm 文件名 rm ...
- C# WindowService 安装和卸载
安装脚本 install.bat 内容 @echo 安装WindowService%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\installutil ...
- 机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明
GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果.这个时候就是需要动脑筋了.数据量比较大 ...