5.17打卡

一、问题描述:

警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。
4个人给警察的回答如下。
甲说:“乙没有偷,是丁偷的。”
乙说:“我没有偷,是丙偷的。”
丙说:“甲没有偷,是乙偷的。”
丁说:“我没有偷。”
请根据这4个人的回答判断谁是窃贼。

二、设计思路:
该问题的关键是使用C语言中的逻辑表达式将问题分析中得到的4个条件表达出来,逻辑表达式如下:
B+D==1&&B+C==1&&A+B==1 ⑤
条件④表示A、B、C、D中必有一个为1。
在程序中可依次假定甲、乙、丙、丁分别为窃贼,带入5进行测试,满足条件⑤的那个人为窃贼,具体如下:
1)先假定甲为窃贼,即A=1、B=0、C=0、D=0,带入条件⑤测试是否成立,若成立则不再对乙、丙、丁进行测试。
(2)若不成立,则再假定乙为窃贼,即A=0,B=1,C=0,D=0,带入条件⑤测试是否成立,若成立则可确定乙为窃贼,不再对丙、丁进行测试。
(3)若不成立,再假定丙为窃贼,即A=0,B=0,C=1,D=0,带入条件⑤测试是否成立,若成立则可确定丙为窃贼,不再对丁进行测试。
(4)若不成立,再假定丁为窃贼,即A=0,B=0,C=0,D=1,带入条件⑤测试是否成立,若成立则确定丁为窃贼。

三、程序流程图

 

 

 

四、代码实现

#include<stdio.h>

int main(){

int i,A=1,B=0,C=0,D=0;

for(i=1;i<=4;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;

    }

}

printf("判断结果:\n");

if(i==1)

    printf("甲是窃贼\n");

if(i==2)

printf("乙是窃贼\n");

    if(i==3)

printf("丙是窃贼\n");

if(i==4)

printf("丁是窃贼\n");

}

 

posted @ 2023-05-17 20:26  恋恋恋白  阅读(20)  评论(0)    收藏  举报