已知A、B、C、D四个人中有一人是小偷,并且,这四个人中每人要么说真话,要么说假话。在审问过程中,这四个人分别回答如下:
A说:B没有偷,是D偷的。
B说:我没有偷,是C偷的。
C说:A没有偷,是B偷的。
D说:我没有偷。
分析:解题关键在于理解“这四个人中每人要么说真话,要么说假话”这句话。设ABCD分别代表四人,偷了的值是1,没偷值为2。
以A为例,他说了两句话,这两句话要么都是对的,要么都是错的。所以说,如果B偷了(B=1),D一定没有偷(D=0);反之若B没偷(B=0),那么一定是D偷的(D=1)。即B+D=1。
同理可得B+C=1 A+B=1。
对于D,他只说了一句话,所以如果D偷了(D=1)那么(A+B+C=0);如果D没偷(D=0)那么就是甲乙丙三人中某人偷的(A+B+C=1)。即A+B+C+D=1。
分析好后,代码便很好写了。
#include<stdio.h>
int 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==1){printf("a是小偷\n");}else if(b==1){printf("b是小偷\n");}else if(c==1){printf("c是小偷\n");}else{printf("d是小偷\n");}}}}}}return 0;
}
结果: