问题描述:
已知A、B、C、D四个人中有一人是小偷,并且,这四个人中每人要么说真话,要么说假话。在审问过程中,这四个人分别回答如下:
A说:B没有偷,是D偷的。
B说:我没有偷,是C偷的。
C说:A没有偷,是B偷的。
D说:我没有偷。
编写程序,确定谁是小偷。
分析:
用整型变量a、b、c、d分别表示A、B、C、D四个人是否是小偷的状态,且变量只取值为0和1,值为1表示该人是小偷,值为0表示该人不是小偷。然后根据四个人的回答得到确定谁是小偷的条件,接着只要穷举变量a、b、c、d取值0或1的各种情况,再用上述条件来判断,满足条件的取值中,对应变量为1的那个人就是小偷。
代码实现:
#include<stdio.h>
void main(){
int a,b,c,d;
for(a=0;a<2;a++)
for(b=0;b<2;b++)
for(c=0;c<2;c++)
for(d=0;d<2;d++){
if(b+d==1 && b+c==1 && a+b==1 && a+b+c+d==1){
if(a) printf("小偷是A\n");
if(b) printf("小偷是B\n");
if(c) printf("小偷是C\n");
if(d) printf("小偷是D\n");
}
}
}
代码运行截图: