66-甲说乙说谎,乙说丙说谎,丙说甲乙说谎
2014-01-25 19:14
232 查看
#include <stdio.h> /* 三个嫌疑犯在法官面前各执一词,甲说:乙在说谎;乙说:丙在说谎;丙说:甲乙两人都在说谎。法官为了难,甲乙丙三人到底谁在说谎,谁说的是真话? 题目分析: 这是一道十分有趣的逻辑推理问题。解决这类逻辑推理问题最简单直观的方法是使用穷举法。甲乙丙三人中任何人所说的话无外乎有两种可能,即真和假。如果用1表示真,用0表示假,甲乙丙三人所说的话的真假情况限定在以下范围内。 */ int main(int argc, char *argv[]) { int a,b,c; for(a=0; a<2; a++) for(b=0; b<2; b++) for(c=0; c<2; c++) if((a&&!b || !a&&b) && (b&&!c || !b&&c) && (c &&a+b == 0 || !c&&a+b != 0)){ printf("甲说的话是%s\n",a?"真":"假"); printf("乙说的话是%s\n",b?"真":"假"); printf("丙说的话是%s\n",c?"真":"假"); } }
分析的过程:
假设甲,乙,丙三个人所说的话用变量a,b,c表示,0代表说假话,1代表说真话。
我们可以列出如下的式子:
if a == 1 else b = 0
if a == 0 else b = 1
if b == 1 else c = 0
if b == 0 else c = 1
if c == 1 else a+b = 0
if c == 0 else a+b = 1
相关文章推荐
- hoge66的专栏
- Solaris Xen Drop 66 – Setup Dom0
- 在中信66楼微软Offic参加讲座
- Windows API一日一练(66)CreateWaitableTimer和SetWaitableTimer函数
- LCC编译器的源程序分析(66)DAG树分析例子
- 谁在说谎
- [英语阅读]美民间文化节将办“说谎大赛”
- web developer tips (66):输入属性时自动插入引号
- 方舟子炒作还是唐骏说谎?坚称获得加州理工博士学位
- Android 中文API (66) —— BluetoothClass.Device
- Android培训班(66)dex文件打开流程
- 《那些年啊,那些事——一个程序员的奋斗史》——66
- (百例编程)66.除式还原(1)
- 十七大以来纪检机关处分66万人 查处薄熙来等案-十七大-中纪委-党纪
- 66
- [Leetcode 4] 66 Plus One
- 如何判断求职者说谎
- 配置OpenCV产生flann\logger.h(66): error C4996: 'fopen': This function or variable may be unsafe问题
- 这就是传说中的能治疗说谎的果子
- 66 Android SlidingDrawer 简单使用(一般从底部推出)