一位法官在审理一起盗窃案时,对涉及的4名嫌疑犯A、B、C、D进行了审问。4人分别供述如下: A:“罪犯在B、C、D三人之中。” B:“我没有作案,是C偷的。” C:“在A和D中间有一个是罪犯。” D:“B说的是事实。” 经过充分的调查,证实4人中只有两人说了真话,另外两人说的是假话,并且罪犯只有一个。请确定真正的罪犯。 **输出格式要求:"4个%d,\n" "A是罪犯.\n" "B是罪犯.\n" "C是罪犯.\n" "D是罪犯.\n" 说明:ABCD只能有一个是罪犯,输出的四个整数为0或1,分别代表ABCD是罪犯,如假设程序输出为: 1,0,0,0 <===此输出代表A是罪犯,B、C、D不是罪犯 A是罪犯. <===用文字解释上面的含义,程序输出必须有这两行
1条回答 默认 最新
- aabyte 2022-04-24 17:05关注
思路见代码里注释:
#include <stdio.h> int main(void) { int A = 0,B = 0,C = 0,D = 0; //A,B,C,D代表四个人,如果值为 0代表不是罪犯,为 1代表是罪犯 /* A,B,C,D四个人的供述转换为程序语言,即: A : B == 1 || C == 1 || D == 1 罪犯在B、C、D三人之中 B : B == 0 && C == 1 B没有作案,是C偷的 C : A == 1 || D == 1 在A和D中间有一个是罪犯 D : B == 0 && C == 1 B说的是事实 题目还给出两个条件: 条件1 A,B,C,D中两个人说真话,两个人说假话,而 B和 D的供述是一样的 所以只有两种情况: 情况1 A和 C说的是真的 B和 D说的是假的 情况2 A和 C说的是假的 B和 D说的是真的 条件2 A,B,C,D只有一个人是罪犯,转换为程序语言: A + B + C + D == 1 */ for(A = 0; A <= 1; A ++) { for(B = 0; B <= 1; B ++) { for(C = 0; C <= 1; C ++) { for(D = 0; D <= 1; D ++) //枚举A,B,C,D所有的取值情况 { //情况一 if(B == 1 || C == 1 || D == 1 ) //如果 A 说的是真话 if(A == 1 || D == 1) //并且 C 说的是真话 if(!(B == 0 && C == 1)) //并且 B 和 D 说的是假话 if(A + B + C + D == 1) //并且A,B,C,D中只有一个是罪犯 printf("%d %d %d %d\n",A,B,C,D); //情况二 if(B == 0 && C == 1) //如果 B 和 D 说的是真话 if(!(B == 1 || C == 1 || D == 1 )) //并且 A说的是假话 if(!(A == 1 || D == 1)) //并且 C说的是假话 if(A + B + C + D == 1) //并且A,B,C,D中只有一个是罪犯 printf("%d %d %d %d\n",A,B,C,D); } } } } return 0; }
运行结果:
即 D 是罪犯,A,B,C不是, A,C说的真话,B,D说的假话
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥20 simulink单相桥式整流电路
- ¥35 问问51单片机流水灯的代码该怎么写
- ¥15 关于#百度#的问题:感觉已经将字体段落、字体、页边距、纸张大小、文档网络调成与论文模板一致,为什么黄色部分字体左右的间距还是不一样啊,求私信发文件接收看一下
- ¥15 stata webuse报错
- ¥15 TypeError: Cannot read properties of undefined (reading 'status')
- ¥15 如何利用AI去除图片中的竹架子
- ¥15 python 写个基金爬取的代码,自动卖出功能
- ¥15 Linux系统启动不起来
- ¥15 为什么运行仿真数码管不亮(语言-c语言)
- ¥15 陈仁良《直升机飞行动力学》小扰动线化方程如何推导