题目
协助破案。假设已经查清,有A,B,C,D,E五个嫌疑人可能参与制造了一起银行抢劫案,但是不知其中到底是哪儿个人是真正的案犯,不过有确凿证据表明:"
"1.如果A参与了作案,则B一定义也会参加"
"2.B和C两人只有一人参与了作案"
"3.C和D要么都参与了作案,要么都没有参与作案"
"4.D和E两个人至少有一个人参与作案"
"5.如果E作案,则A和D一定作案"
编程
void checkMatch(bool a, bool b, bool c, bool d, bool e);
//==============================================================================
int main(int argc, char *argv[]) {
cout << "协助破案。假设已经查清,有A,B,C,D,E五个嫌疑人可能参与制造了一起银行抢劫案,但是不知其中到底是哪儿个人是真正的案犯,不过有确凿证据表明:\n"
"1.如果A参与了作案,则B一定义也会参加\n"
"2.B和C两人只有一人参与了作案\n"
"3.C和D要么都参与了作案,要么都没有参与作案\n"
"4.D和E两个人至少有一个人参与作案\n"
"5.如果E作案,则A和D一定作案\n"
<< endl;
for (int a = 0; a < 2; a++) {
for (int b = 0; b < 2; b++) {
for (int c = 0; c < 2; c++) {
for (int d = 0; d < 2; d++) {
for (int e = 0; e < 2; e++) {
checkMatch(a != 0, b != 0, c != 0, d != 0, e != 0);
}
}
}
}
}
return 0;
}
/**
*
* @param a A是否犯案
* @param b B是否犯案
* @param c C是否犯案
* @param d D是否犯案
* @param e E是否犯案
*/
void checkMatch(bool a, bool b, bool c, bool d, bool e) {
bool match1 = a & b || !a;
bool match2 = b & !c || !b & c;
bool match3 = c & d || !c & !d;
bool match4 = d & !e || !d & e;
bool match5 = e & a & d || !e;
if (match1 && match2 && match3 && match4 && match5) {
cout << "案情查明了:" << endl;
cout << "A" << (a ? "犯案了" : "没有犯案") << endl;
cout << "B" << (b ? "犯案了" : "没有犯案") << endl;
cout << "C" << (c ? "犯案了" : "没有犯案") << endl;
cout << "D" << (d ? "犯案了" : "没有犯案") << endl;
cout << "E" << (e ? "犯案了" : "没有犯案") << endl;
}
}
答案
案情查明了:
A没有犯案
B没有犯案
C犯案了
D犯案了
E没有犯案
网友评论