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/C++ Qt QChart绘图组件的具体使用

    C/C++ Qt QChart绘图组件的具体使用

    QtCharts 组件是QT中提供图表绘制的模块,用来绘制常规图形,本文就详细的介绍了QChart的使用,以及柱状图,折线图等常用的图形的实现,感兴趣的可以了解一下
    2021-11-11
  • C语言实现括号匹配的方法

    C语言实现括号匹配的方法

    这篇文章主要介绍了C语言实现括号匹配的方法,文中代码简单易懂,方便大家更好的学习,感兴趣的朋友可以参考下
    2020-06-06
  • C指针原理教程之语法树及其实现

    C指针原理教程之语法树及其实现

    本文给大家分享的是如何使用C语言的指针原来来实现语法树,并给大家提供了详细的实例代码,希望大家能够喜欢
    2019-02-02
  • C语言中的指针以及二级指针代码详解

    C语言中的指针以及二级指针代码详解

    这篇文章主要介绍了C语言中的指针以及二级指针代码详解,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • c++调用python实现图片ocr识别

    c++调用python实现图片ocr识别

    所谓c++调用python,实际上就是在c++中把整个python当作一个第三方库引入,然后使用特定的接口来调用python的函数或者直接执行python脚本,本文介绍的是调用python实现图片ocr识别,感兴趣的可以了解下
    2023-09-09
  • Java C++ 题解leetcode857雇佣K名工人最低成本vector pair

    Java C++ 题解leetcode857雇佣K名工人最低成本vector pair

    这篇文章主要为大家介绍了Java C++ 题解leetcode857雇佣K名工人最低成本vector pair示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • C++中std::priority_queue的使用小结

    C++中std::priority_queue的使用小结

    std::priority_queue是C++ STL提供的优先队列,本文主要介绍了C++中std::priority_queue的使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • C++使用模板实现单链表(类外实现)

    C++使用模板实现单链表(类外实现)

    这篇文章主要为大家详细介绍了C++使用模板实现单链表的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • C语言全排列回溯算法介绍

    C语言全排列回溯算法介绍

    大家好,本篇文章主要讲的是C语言全排列回溯算法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 利用C++11原子量如何实现自旋锁详解

    利用C++11原子量如何实现自旋锁详解

    当自旋锁尝试获取锁时以忙等待(busy waiting)的形式不断地循环检查锁是否可用,下面这篇文章主要给大家介绍了关于利用C++11原子量如何实现自旋锁的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-06-06

最新评论