设:甲是主谋,则甲说假话,乙说假话,丙说真话,丁说真话,与题目中:只有一个人说了真话冲突
设:乙是主谋,则甲说真话,乙说假话,丙说真话,丁说假话。一样与提示冲突
设:丁是主谋,则甲说真话,乙说真话,丙说真话,丁说假话,一样冲突
设:丙是主谋,则甲说真话,乙说假话,丙说假话,丁说假话,与题目降服,
所以,丙是主谋
如果按照甲说的是真话,那么丁说甲是主谋,那他说的就是假话,甲不是主谋,排除甲,乙话丙也排除,最后只有丁是主谋。
原题:
警察抓住四个小偷,其中一个是主谋。审讯时,甲说他不是主谋,乙说丁是主谋,丙说他不是主谋,丁说甲是主谋。警方查出只有一个人说的是真话。请问谁是主谋?
条件是只有一个人说真话,所以一个一个分析
1、a假设甲说的真话,他不是主谋,主谋在乙丙丁之间。b乙说丁是主谋,假话,丁不是主谋,成立。c丙说他不是主谋,主谋是甲乙丁之间,假话,丙是主谋,成立。d丁说甲是主谋,假话,家不是主谋,成立。
2、a假设乙说的真话,丁是主谋。b甲说他不是主谋,假话,甲是主谋,和假设乙说真话矛盾,假设不成立。得出结果乙说的假话。
3、a假设丙说的真话,丙不是主谋,主谋在甲乙丁之间。b、甲说他不是主谋,假话,甲是主谋,成立。c乙说丁是主谋,假话,丁不是主谋,成立。d丁说甲是主谋,假话,甲不是主谋,和假设甲说的是假话矛盾,不成立。得出结果,丙说的是假话。
4、a假设丁说的真话,甲是主谋。b甲说他不是主谋,假话,他是主谋,成立。c乙说丁是主谋,假话,丁不是主谋,成立。d丙说他不是主谋,假话,他是主谋,和假设丁说的是真话矛盾,不成立。得出结果,丁说得假话。
综合以上四次假设分析得出结果,甲说的是真话,乙丙丁都是假话。根据丙是假话得出结果,主谋是丙。
#include#includemain(){inta[5],h[5],i;//h数组代表4个人说的是真话还是假话,a数组表示a,b,c,dfor(i=1;i<=4;i++){h[1]=h[2]=h[3]=h[4]=1;//默认4个人都是真话a[1]=a[2]=a[3]=a[4]=0;//默认4个人都不是小偷h[i]=0;//选择其中1人说假话if(h[4]==1){h[3]=0;}else{h[3]=1;}//因为这个是对其他真假话的判断,会影响下面的判断,所以要放最前面if(h[1]==1){a[1]=0;}else{a[1]=1;}if(h[2]==1){a[3]=1;}else{a[3]=0;}if(h[3]==1){a[4]=1;}else{a[4]=0;}if((a[1]+a[2]+a[3]+a[4])==1)//等于1就是只有1个小偷,其他都是0(不是小偷){for(i=1;i<=4;i++){if(a[i]==1){printf("%d\n",i);}//输出小偷}}}getch();return0;}
只要4个都是嫌疑人,都参加犯罪来,按照古法,先剁手,再在脸上刺字:盗贼。全国通用。那时就好了 夜不闭户路不拾遗了,对吧?