假设A、B、C、D分别代表四个人,变量的值为1代表该人是窃贼。
甲说:”乙没有偷,是丁偷的。” B+D=1
乙说:“我没有偷,是丙偷有。” B+C=1
丙说:“甲没有偷,是乙偷的。” A+B=1
丁说:“我没有偷。” A+B+C+D=1
在这里丁说的话太笼统无法判断,而其他3人都指出了2个人。将他们3个人的话取
交集符合的就是窃贼:B+D==1&&B+C==1&&A+B==1
#include<stdio.h>
int main()
{
int i,j,a[4]
for(i=0i<4i++) /*假定只有第i个人为窃贼*/
{
for(j=0j<4j++) /*将第i个人设置为1表示窃贼,其余为0*/
if(j==i)a[j]=1
else a[j]=0
if(a[3]+a[1]==1&&a[1]+a[2]==1&&a[0]+a[1]==1) /*判断条件是否成立*/
{
printf("盗窃者是: ")/*成立*/
for(j=0j<=3j++) /*输出计算结果*/
if(a[j])
printf("%c.",j+'A')
printf("\n")
}
}
}
窃贼是B,也就是乙
推理题目,一个一个的去验证,例如:假设甲是窃贼,那么他的话就是假的,乙说的也是假的,那么丙没有偷,丙说的是真的,那么丁偷了,这就矛盾了!编程的话,将命题改写成符号,例如甲 aa = 0表示甲说甲没有偷。ba=0表示乙说甲没有偷,bc=1表示乙说是丙偷的,若假设a=1,那么ba=0为假,bc=1也为假,那么cc=0为真,cd=1也为真,a=1和d=1冲突就不行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)