C语言中的盗贼(小偷)问题详解

C语言中的盗贼(小偷)问题详解

问题描述:警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。

这4个人给警察的回答如下。

甲说:“乙没有偷,是丁偷的。”

乙说:“我没有偷,是丙偷的。”

丙说:“甲没有偷,是乙偷的。”

丁说:“我没有偷。”

请根据这4个人的回答判断谁是窃贼。

分析过程:突破点从丁开始,因为根据丁的回答是无法判断的,而且我们可以发现甲乙丙三人的回答是十分相似的(如果不是ta,就是ta),我们现在先不去考虑甲乙丙谁说谎谁不说谎。我们先把甲乙丙丁设成ABCD,变量为1的是盗贼,那么

甲—B+D==1;

乙—B+C==1;

丙—A+B==1;

丁—A+B+C+D==1;

根据这四个人可以得到这四个条件

假定一个人是盗贼 代入这四个条件中

 第一种:

#include <stdio.h> int main() { int A,B,C,D; for(A=0; A<=1; A++) for(B=0; B<=1; B++) for(C=0; C<=1; C++) for(D=0; D<=1; D++) { if(B+D==1&&B+C==1&&A+B==1&&A+B+C+D==1) if(A) printf("甲是窃贼\n"); else if(B) printf("乙是窃贼\n"); else if(C) printf("丙是窃贼\n"); else printf("丁是窃贼\n"); } }

第二种:只用一个for循环就可以了 假定一个人为盗贼代入条件

#include <stdio.h> int main() { int i,A=1,B=0,C=0,D=0; for(i=0; i<=1; i++) if(B+D==1&&B+C==1&&A+B==1) break; else { if(i==1) { A=0; B=1; } if(i==2) { B=0; C=1; } if(i==3) { C=0; D=1; } } if(i==1) printf("甲是盗贼"); if(i==2) printf("乙是盗贼"); if(i==3) printf("丙是盗贼"); if(i==4) printf("丁是盗贼"); }

到此这篇关于C语言中的盗贼(小偷)问题详解的文章就介绍到这了,更多相关C语言盗贼问题内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    公共CPU接口类型的详细描述

    公共CPU接口类型的详细描述,,我们知道CPU是电脑的大脑, CPU的处理速度直接决定电脑的性能, 那你知道CPU发展到现在, 都那些CPU接口类型吗.

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    光波炉的正确使用方法详解

    光波炉的正确使用方法详解,食物,格兰仕,光波炉的正确使用方法详解以前的编辑器已经引入了光烤箱和微波炉之间的六个差异。我相信每个人都

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

    cad图幅设置|CAD图幅设置详解

    cad图幅设置|CAD图幅设置详解,,1. CAD图幅设置详解1、首先我们看一下自己的CAD是不是经典模式,我们点击左上角的扩展箭头。2、之后我们就可