#include <iostream>
using namespace std;
int main()
{
// 依次枚举一下6位嫌犯分别的两种可能,1为嫌犯,0不是嫌犯
for(int a = 0; a <= 1; a++)
{
for(int b = 0; b <= 1; b++)
{
for(int c = 0; c <= 1; c++)
{
for(int d = 0; d <= 1; d++)
{
for(int e = 0; e <= 1; e++)
{
for(int f = 0; f <= 1; f++)
{
// 本题未限定罪犯的人数:不需要在写状态之前添加if判断
int cc1 = (a || b);
int cc2 = !(a && d); // A和D不可能同时为嫌犯
int cc3 = (a && e) || (a && f) || (e && f); // 至少有2位嫌犯:只需要考虑有2人的情况
int cc4 = (b && c) || (!b && !c); // B和C要么同时出现,要么都不出现
int cc5 = (c && !d) || (!c && d); // 不是C就是D,不是D就是C
// 第6句话:分析 ①若D参与作案,E可能参与了作案,也可能没参与 ②若D没参与作案,那么E一定不会参与作案
int cc6 = d || (!d && !e);
// 第三步:将状态相加,根据题目所给的真话数量,输出合适的答案
if(cc1 + cc2 + cc3 + cc4 + cc5 + cc6 == 6)
{
cout << "A" << (a == 1 ? "是" : "不是") << "罪犯" << endl;
cout << "B" << (b == 1 ? "是" : "不是") << "罪犯" << endl;
cout << "C" << (c == 1 ? "是" : "不是") << "罪犯" << endl;
cout << "D" << (d == 1 ? "是" : "不是") << "罪犯" << endl;
cout << "E" << (e == 1 ? "是" : "不是") << "罪犯" << endl;
cout << "F" << (f == 1 ? "是" : "不是") << "罪犯" << endl;
}
}
}
}
}
}
}
return 0;
}
1.本题讨论的对象,是他们自己本身 --> for循环的对象可知(本题for循环的对象为:我是否为罪犯) 2.本题未限定罪犯的人数:不需要在写状态之前添加if判断 3.本题所有状态均为真话:相当于告知了输出前的if条件判断