一位法官在审理一起盗窃案时,对涉及的4名嫌疑犯A、B、C、D进行了审问。4人分别供述如下: A:“罪犯在B、C、D三人之中。” B:“我没有作案,是C偷的。” C:“在A和D中间有一个是罪犯。” D:“B说的是事实。” 经过充分的调查,证实4人中只有两人说了真话,另外两人说的是假话,并且罪犯只有一个。请确定真正的罪犯。 **输出格式要求:"%d,%d,%d,%d\n" "A是罪犯.\n" "B是罪犯.\n" "C是罪犯.\n" "D是罪犯.\n" 说明:ABCD只能有一个是罪犯,输出的四个整数为0或1,分别代表ABCD是罪犯,如假设程序输出为: 1,0,0,0 <===此输出代表A是罪犯,B、C、D不是罪犯 A是罪犯. <===用文字解释上面的含义,程序输出必须有这两行用c
时间: 2024-03-29 12:41:16 浏览: 17
好的,根据你的要求,以下是实现题目功能的代码:
```c++
#include <stdio.h>
int main()
{
int a, b, c, d;
int count;
for(a = 0; a < 2; a++){
for(b = 0; b < 2; b++){
for(c = 0; c < 2; c++){
for(d = 0; d < 2; d++){
count = 0;
if(a + b + c + d != 1) continue;
if(b == 1) continue;
if(a == 1 && !(c == 1 || d == 1)) continue;
if(c == 1 && !(a == 1 || d == 1)) continue;
if(d == 1 && !(b == 1)) continue;
count = a + b + c + d;
if(count == 2){
printf("%d,%d,%d,%d\n", a, b, c, d);
if(a == 1) printf("A是罪犯.\n");
if(b == 1) printf("B是罪犯.\n");
if(c == 1) printf("C是罪犯.\n");
if(d == 1) printf("D是罪犯.\n");
}
}
}
}
}
return 0;
}
```
程序使用4层嵌套的循环枚举4个人是否说真话,共有16种情况。根据题目中的条件进行筛选,得到符合条件的情况。如果只有一个情况符合条件,那么对应的人就是罪犯。