這是大一的時候寫的一個小程序,問題描述為確認小偷,有四個人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),可以得知最多只有兩人說真話。這個程序采用窮舉的思想,把所有的情況都嘗試一遍,就目前來說,我并沒有想到更好的代碼。
新聞熱點
疑難解答