谁是嫌疑犯问题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 ...
随机推荐
- pm2 配置方式
1.命令生产默认示例配置文件pm2 ecosystem或pm2 init,运行默认会生成ecosystem.config.js配置文件 module.exports = { apps: [ { nam ...
- Appnium安装
Refer to https://blog.csdn.net/xgh1951/article/details/85124327
- Git提交出现 Everything up-to-date
出现这个问题的原因是git提交改动到缓存,要push的时候不会将本地所有的分支都push掉,所以出现这个问题.我们应该告诉git提交哪个分支.这里有种特殊的情况是如果你是fork别人的仓库再clone ...
- SmartTest__自动随机填充表单数据
下载地址https://addons.mozilla.org/zh-CN/firefox/addon/smarttesttool/ 安装完成后可以在工具栏看见 目前只包含两个功能 测试使用
- Apache 流框架Flink简介
1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意.Flink是原生的流处理系统,提供high level的API.Flink也提供 API来像Spark ...
- RocketMQ之八:水平扩展及负载均衡详解
RocketMQ是一个分布式具有高度可扩展性的消息中间件.本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的. NameServer集群 提供轻量级的服务发现和路由.每个 ...
- vue的双向绑定和依赖收集
在掘金上买了一个关于解读vue源码的小册,因为是付费的,所以还比较放心 在小册里看到了关于vue双向绑定和依赖收集的部分,总感觉有些怪怪的,然后就自己跟着敲了一遍. 敲完后,发现完全无法运行, 坑啊 ...
- Email功能的设定
在前期制定发送邮件功能时,都是使用导入import smtplib模块来实现,虽说能实现, 但是对新人.刚接触的来说不太友好,虽然网上五花八门的教程一大推,但还是要自己花不少时间才搞定(笔者就是) 在 ...
- MySQL知识篇-SQL2
1 数据库基本操作? (1) 查看数据库 show databases; (2)切换到指定的数据库 use dbname; (3)创建数据库 create database 库名 charset=ut ...
- spring-boot和jboss应用添加pinpiont方式
一.jboss应用 添加方式,添加方式,在run.conf文件配置pinpoint相关信息,如下: if [ "x$JAVA_OPTS" = "x" ]; th ...