题目:谁在说谎?
一 个侦探逮捕了5个嫌疑人。这5个人因为供出的作案地点各有出入,进一步审讯了他们之后,他们分别提出了如下的申诉:
A:“5个人当中有1个人说了谎。”
B:“5个人当中有2个人说了谎。”
C:“5个人当中有3个人说了谎。”
D:“5个人当中有4个人说了谎。”
E:“5个人全说谎。”
问:谁在说谎?
思路:利用for循环对每种情况进行遍历,找出其中符合条件的情况。
#include <iostream>
using namespace std;
bool judge(int A, int B, int C, int D, int E) {
//判断假设是否符合要求
int sum = A + B + C + D + E;
int t = 0;
if (A == 0 && sum != 1) { return false; }
if (B == 0 && sum != 2) { return false; }
if (C == 0 && sum != 3) { return false; }
if (D == 0 && sum != 4) { return false; }
if (E == 0 && sum != 5) { return false; }
return true;
}
void show(int A, int B, int C, int D, int E) {
//打印最终结果
if (A == 0) cout << "A没说谎"<<endl;
else cout << "A说谎了"<<endl;
if (B == 0) cout << "B没说谎"<<endl;
else cout << "B说谎了"<<endl;
if (C == 0)cout << "C没说谎"<<endl;
else cout << "C说谎了"<<endl;
if (D == 0)cout << "D没说谎"<<endl;
else cout << "D说谎了"<<endl;
if (E == 0) cout << "E没说谎"<<endl;
else cout << "E说谎了"<<endl;
}
int main()
{
int count = 0;
int A, B, C, D, E;
//用0表示没有说谎,用1表示说谎
for (A = 0; A <= 1; A++) {
for (B = 0; B <= 1; B++) {
for (C = 0; C <= 1; C++) {
for (D = 0; D <= 1; D++) {
for (E = 0; E <= 1; E++) {
if (judge(A, B, C, D, E)) {
count++;
cout << "第 " << count << " 种情况:" << endl;
show(A, B, C, D, E);
cout << "-----------------------------------------" <<endl;
}
}
}
}
}
}
return 0;
}
结果: