算法设计与分析:第一张 算法分析介绍 1.2逻辑推理之警察抓小偷

来源:互联网 发布:淘宝怎么看卖家电话 编辑:程序博客网 时间:2024/04/30 06:18
/*警察抓小偷:警察局抓了a,b,c,d四名嫌疑犯,其中只有一人是小偷。审问中:a说:"我不是小偷"b说:"c肯定是小偷"c说:"小偷肯定是d"d说:"c在冤枉人"分析:看似非数值化的问题,经过数字化之后,可以用计算机求解。假设a,b,c,d分别用1,2,3,4编号。然后用x=i表示第i个编号的人是小偷a说的话等价于: x != 1b            : x = 3c : x = 4d : 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 != 1b            : x = 3c : x = 4d : 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和secondbreak;}}}int main(int argc,char* argv[]){process();getchar();return 0;}

0 0
原创粉丝点击