在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人
判断如下:
甲:王教授不是苏州人,是上海人.
乙:王教授不是上海人,是苏州人.
丙:王教授既不是上海人,也不是杭州人.
听完这3人的判断后,王教授笑着说,你们3人中有一人说的全对,有一人说的对了一半,另一个人说的完全不对.试用逻辑演算分析王教授到底是哪里人.
(代码中运用多重for循环模拟真值表,进而获得最终结果)
#include<stdio.h>
int main(){
int p,q,r;/*p :王教授是苏州人 q:王教授是上海人 r:王教授是杭州人*/
//设置数组存储每个人说的话
int B[4];
int C[4];
int D[4];
for(p=0;p<=1;p++){
for(q=0;q<=1;q++){
for(r=0;r<=1;r++){
//甲说的话的对错情况
B[1]=(!p)&&q;
B[2]=((!p)&&(!q))||(p&&q);//分别为全对,半对,全错 的情况
B[3]=p&&(!q);
//乙说的话的对错情况
C[1]=p&&(!q);
C[2]=(p&&q)||((!p)&&(!q));
C[3]=(!p)&&q;
//丙说的话的对错情况
D[1]=(!q)&&(!r);
D[2]=((!q)&&r)||(q&&(!r));
D[3]=q&&r;
//将所有的情况用整数变量储存
int a=B[1]&&C[2]&&D[3];
int b=B[1]&&C[3]&&D[2];
int c=B[2]&&C[1]&&D[3];
int d=B[2]&&C[3]&&D[1];
int f=B[3]&&C[1]&&D[2];
int g=B[3]&&C[2]&&D[1];
//通过if判断得出结果
if(a||b||c||d||f||g){
if(p&&(!q)&&(!r))printf("王教授是苏州人\n");//王教授只能来自一个地方
else if(q&&(!p)&&(!r))printf("王教授是上海人\n");//即p,q,r只有一个为真
else if(r&&(!p)&&(!q))printf("王教授是杭州人\n");
}
}
}
}return 0;
}
结果如下:
王教授是上海人
--------------------------------
Process exited after 0.0182 seconds with return value 0
请按任意键继续. . .