C语言笔记:推理问题

问题:一位法官在审理一起盗窃案时,对涉及的四名嫌疑犯A,B,C,D进行审问。四人分别供述如下:
A:罪犯在B,C,D三人之中

B:我没有作案,是C偷的
C:在A和D之间有一个是罪犯
D:B说的是事实

但经过警方正确的调查,目前能确定的是四人之中只有两个说了真话,并且罪犯只有一人。请确定真正的罪犯。

分析:有四个人(四个循环,嵌套的),每个人有两种情况,即是罪犯或不是(可用数字代替,0代表不是罪犯,1表示是,即确定每层循环的范围是0~1),四人所说的不确定的话构成四个逻辑表达式,并且返回一个布尔值,再用警方确定的话再构成两个表达式(if语句)进行筛选。

#include <stdio.h>
int main(void)
{
 int A,B,C,D;//分别表示A,B,C,D是否是罪犯,如果是,其值为1,否则为0 
 int la,lb,lc,ld;//分别表示A,B,C,D所说的话,真为1,假为0 
 for(A=0;A<=1;A++)
 {
  for(B=0;B<=1;B++)
  {
   for(C=0;C<=1;C++)
   {
    for(D=0;D<=1;D++)
    {
     la=B||C||D;//A说:嫌疑犯在B,C,D之中
     lb=!B&&C;//B说:我没有作案,是C作案
     lc=(A+D==1);//C说:A和D之间有一个罪犯
     ld=lb;//D说:赞同B所说
     if(la+lb+lc+ld==2&&A+B+C+D==1)//A,B,C,D中有两个人说的话是真的并且四人之中只有一个罪犯 
     {
      if(la)
      {
       printf("A说的话是真的!\n");
      }
      if(lb)
      {
       printf("B说的话是真的!\n");
      }
      if(lc)
      {
       printf("C所说的话是真的!\n");
      }
      if(ld)
      {
       printf("D所说的话是真的!\n");
      }
      
      if(A)
      {
       printf("A是罪犯!\n");
      }
      else if(B)
      {
       printf("B是罪犯!\n");
      }
      else if(C)
      {
       printf("C是罪犯!\n");
      }
      else
      {
       printf("D是罪犯!\n");
      }
     } 
    }
   }
  }
 }
 return 0;
}

在这里插入图片描述

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值