问题
警察审问四个嫌疑犯。这四个嫌疑犯中只有一个小偷。甲说:乙没偷,是丁偷的。乙说:我没偷,是丙偷的。丙说:甲没偷,是乙偷的。丁说:我没偷。请根据这四句话判断是谁偷的。
分析
每个人只有两种状态:偷或者没偷。
程序
1: /** 2: * @file 051c.c 3: * @author Chaolong Zhang <emacsun@163.com> 4: * @date Wed Jul 10 22:34:33 2013 5: * 6: * @brief 警察审问四个嫌疑犯。这四个嫌疑犯中只有一个小偷。甲说:乙没偷,是丁偷的。乙说:我没偷,是丙偷的。丙说:甲没偷,是乙偷的。丁说:我没偷。请根据这四句话判断是谁偷的。 7: * 8: * 9: */ 10: 11: #include <stdio.h> 12: 13: #define N 2 14: int main(int argc, char *argv[]) 15: { 16: int a,b,c,d; 17: for (a=0; a < N; ++a){ 18: for (b=0; b < N; ++b){ 19: for (c=0; c < N; ++c){ 20: for (d=0; d < N; ++d){ 21: if (( a+b==1 ) && ( b+d==1 ) && ( b+c==1 ) && ( a+b+c+d ==1 )){ 22: printf ("%d,%d,%d,%d\n",a,b,c,d); 23: } 24: } 25: } 26: } 27: } 28: return 0; 29: }
结果
0,1,0,0
知:B是小偷。其实这个题目可以用矩阵的特征向量来分析。