这是大一的时候写的一个小程序,问题描述为确认小偷,有四个人A、B、C、D,他们中有一个是小偷,然后这四人分别说
A说:B没有偷,是D偷的。
B说:我没有偷,是C偷的。C说:A没有偷,是B偷的。
D说:我没有偷。
A、B、C、D四人要么说真话,要么说假话。
那么根据思路,A和B,A和C,A和D,B和C不能同时成立。在这里假设值为0是假话,值为1是真话。
/*A:B没有偷,是D偷的。B:我没有偷,是C偷的。C:A没有偷,是B偷的。D:我没有偷。*/#include <stdio.h>#include <stdlib.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((a+b<=1)&&(b+c<=1)&&(a+c<=1)&&(a+d<=1)&&(a+b+c+d>=0)) { if (a == 1)PRintf("D is thief/n"); if (b == 1)printf("C is thief/n"); if (c == 1)printf("B is thief/n"); if (d == 1)printf("D isn't thief/n"); printf("A:%d B:%d C:%d D:%d/n",a,b,c,d); } system("pause"); return 0;}从结果可以得知答案不唯一,题目的条件并没有给完全,而且通过修改if条件里最后一句(a+b+c+d>=0),可以得知最多只有两人说真话。这个程序采用穷举的思想,把所有的情况都尝试一遍,就目前来说,我并没有想到更好的代码。
新闻热点
疑难解答