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

 更新时间:2022年01月23日 17:26:47   作者:Ferry_24  
大家好,本篇文章主要讲的是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语言盗贼问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • c语言数据结构之栈和队列详解(Stack&Queue)

    c语言数据结构之栈和队列详解(Stack&Queue)

    这篇文章主要介绍了c语言数据结构之栈和队列详解(Stack&Queue),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • C/C++格式化日志库实现代码

    C/C++格式化日志库实现代码

    这篇文章主要介绍了C/C++格式化日志库实现代码,需要的朋友可以参考下
    2019-04-04
  • C++利用Opencv实现多个圆形检测

    C++利用Opencv实现多个圆形检测

    霍夫圆检测是opencv中用来检测圆的重要算法,简单的说,霍夫圆检测就是对图像中的弧线做切线,再在切点位置做切线的垂线,然后看这些垂线能交于一点的个数,这个在方法中是自己设定的
    2022-08-08
  • 如何利用C++实现mysql数据库的连接池详解

    如何利用C++实现mysql数据库的连接池详解

    为了提高MySQL数据库的访问的瓶颈,除了在服务器端增设缓存服务器缓存常用的数据之外(如redis),还可以增加数据库连接池,来提高MySQL Server的访问效率,这篇文章主要给大家介绍了关于如何利用C++实现mysql数据库的连接池的相关资料,需要的朋友可以参考下
    2021-07-07
  • 解析四方定理的应用

    解析四方定理的应用

    所有自然数至多只要用四个数的平方和就可以表示
    2013-05-05
  • C语言中 “_at()” 特殊地址定位详解

    C语言中 “_at()” 特殊地址定位详解

    这篇文章主要介绍了C语言中 “_at()” 特殊地址定位详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • C语言从猜数字游戏中理解数据结构

    C语言从猜数字游戏中理解数据结构

    猜数字是兴起于英国的益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。游戏规则为一方出数字,一方猜,今天我们来用这个游戏案例理解数据结构
    2022-04-04
  • C++多线程编程简单实例

    C++多线程编程简单实例

    本文给大家分享的是C++多线程编程简单实例,由于C++本身没有多线程机制,在windows下我们使用调用SDK win32 api来实现,示例都很简单,讲解的也很详细,推荐给大家。
    2015-03-03
  • 浅谈C语言中的指针和数组有什么区别

    浅谈C语言中的指针和数组有什么区别

    C语言中的指针和数组是两个重要的数据结构,它们在内存管理和数据存储方面有许多相似之处,但也存在一些关键的区别,本文就来介绍一下C语言中的指针和数组有什么区别,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 深入解析C++的WNDCLASS结构体及其在Windows中的应用

    深入解析C++的WNDCLASS结构体及其在Windows中的应用

    这篇文章主要介绍了C++的WNDCLASS结构体及其在Windows中的应用,WNDCLASS被用来定义窗口,文中介绍了其诸多属性,需要的朋友可以参考下
    2016-01-01

最新评论