算法设计与分析:第一张 算法分析介绍 1.2逻辑推理之警察抓小偷
2015-08-04 01:08
330 查看
/* 警察抓小偷: 警察局抓了a,b,c,d四名嫌疑犯,其中只有一人是小偷。审问中: a说:"我不是小偷" b说:"c肯定是小偷" c说:"小偷肯定是d" d说:"c在冤枉人" 分析: 看似非数值化的问题,经过数字化之后,可以用计算机求解。 假设a,b,c,d分别用1,2,3,4编号。然后用x=i表示第i个编号的人是小偷 a说的话等价于: x != 1 b : x = 3 c : x = 4 d : x != 4 转化为:4条语句的逻辑值之和为3 即((x != 1) + (x == 3) + (x == 4) + (x != 4)) == 3 枚举1,2,3,4分别进行测试即可 输入: 输出: c */ /* 关键: 1 看似非数值化的问题,经过数字化之后,可以用计算机求解。 假设a,b,c,d分别用1,2,3,4编号。然后用x=i表示第i个编号的人是小偷 a说的话等价于: x != 1 b : x = 3 c : x = 4 d : x != 4 转化为:4条语句的逻辑值之和为3 即((x != 1) + (x == 3) + (x == 4) + (x != 4)) == 3 枚举1,2,3,4分别进行测试即可 2printf("%c\n",(*numToName.find(x)).second);//注意map返回的是first和second */ #include <stdio.h> #include <map> #include <iostream> #include <vector> using namespace std; void process() { map<int,char> numToName; char ch = 'a'; for(int i = 1 ; i <= 4 ; i++) { numToName.insert(make_pair<int,char>(i,ch)); ch++; } for(int x = 1 ; x <= 4 ; x++) { if( ((x != 1) + (x == 3) + (x == 4) + (x != 4)) == 3 ) { printf("%c\n",(*numToName.find(x)).second);//注意map返回的是first和second break; } } } int main(int argc,char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- 1163: [Baltic2008]Mafia
- c++编译链接
- 算法设计与分析: 第一章 算法分析介绍 1.1求任意三个已知数的最小公倍数
- 网站流量的统计中的IP、PV、UV
- Swift对象存储API概述
- 判断单链表是否有环
- Leetcode #90 Subsets II
- 编程之美:第四章 数字之趣 4.10_2数字哑谜和回文
- for循环 break
- 第一个Struts2应用
- Spring Boot 让 MyBatis 打印日志的方法
- 编程之美:第四章 数字之趣 4.11扫雷游戏的概率
- 父类析构函数写成虚函数防止隐蔽的内存泄露问题
- 编程之美:第四章 数字之趣 4.10数字哑谜和回文
- 编程之美:第四章 数字之趣 4.9数独知多少
- 编程之美:第四章 数字之趣 4.7蚂蚁爬杆
- 编程之美:第四章 数字之趣 4.8三角形测试用例
- 数论概论 第四章 高次幂之和与费马大定理 习题解答(宋二娃的BLOG)
- 编程之美:第四章 数字之趣 4.6桶中取黑白球
- CentOS 5.5使用yum来安装LAMP(php运行环境)【转载】