逐一验证即可,伪代码
实验代码:
#include<stdio.h>
int main() {
int res; //res记录做好事的人,1表示A,2表示B,3表示C,4表示D
//假设A说的是真的,验证:
res = 4;
if (res != 4 && res != 2)
{
printf("A is true!");
return 0;
}
//假设B说的是真的,验证:
res = 1;
if (res != 2 && res == 4) {
printf("B is true!");
return 0;
}
//假设C说的是真的,验证:
res = 1;
if (res != 4 && res == 4) {
printf("C is true!");
return 0;
}
//假设D说的是真的,验证:
res = 1;
if (res != 4 && res != 2) {
printf("D is true!");
return 0;
}
}
实验结果
#include<stdio.h>
int main()
{ int i,a[4];
for(a[0]=0;a[0]<2;a[0]++) //四重循环,穷举所有可能
for(a[1]=0;a[1]<2;a[1]++)
for(a[2]=0;a[2]<2;a[2]++)
for(a[3]=0;a[3]<2;a[3]++)
if((a[0]==0)+(a[3]==1)+(a[1]==1)+(a[3]==0)==1&&a[0]+a[1]+a[2]+a[3]==1)
//检测如果四人中只有一人说真话,且只有一人做了好事
for(i=0;i<3;i++) //检查是谁做了好事
if(a[i])printf("%c did it.\n",'A'+i); //输出结论
return 0;
}