狱警发现一囚室的窗户栅栏被剪断了。该囚室有四个囚犯。
A说:不是我
B说:是C
C说:是D
D说:C胡说
已知三个人说真话,一个人说假话。请找出说谎的人。
解析:
可能的状况有lier=‘A',lier=’B',lier=‘C',lier=‘D'。
枚举是按照这 4 种假定逐一地去测试4个人的话有几个人的话是真话。如果不满足3句话为真,就否定这一个假定。
when lier=‘A',代入四句话中
说话人 说的话 关系表达式 值
A 不是我 lier!=‘A’ 0
B 是C Lier==‘C’ 0
C 是D Lier==‘D’ 0
D C胡说 Lier!=‘D’ 1
结论:A没有说谎、、、、、
用枚举法分析完后用画出框图,一目了然
下面是我根据程序框图写出的程序,仅供参考
#include<iostream>
using namespace std;
int main()
{
int k,sum,g;
char lier;
for(k=0;k<4;k++)
{
lier='A'+k;
sum=(lier!='A')+(lier=='C')+(lier=='D')+(lier!='D');//只有一个lier,所以当sum=3时,有一个lier成立
if(sum==3)
{
g=1;
break;
}
}
if(g!=1)
cout<<"无解"<<endl;
else
cout<<"lier为"<<lier<<endl;
return 0;
}