1.问题描述
有A、B、C、D、E这5个人,每个人额头上都帖了一张黑或白的纸。5人对坐,每个人都可以看到其他人额头上纸的颜色。5人相互观察后:
A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑纸。”
B说:“我看见其他4人额头上贴的都是黑纸。”
C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸 。”
D说:“我看见4人额头上贴的都是白纸。”
E什么也没说。
现在己知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这5人谁的额头上贴的是白纸,谁的额头上贴的是黑纸?
2.问题分析
假设a,b,c,d,e分别代表五个人的颜色,假如值为1就是白色,值为0表示黑色
A假如是白纸实话 那么a&&b+c+d+e==3
如果谎话 !a&&b+c+d+e!=3
B如果白纸实话 b&&a+c+d+e==0
如果谎话 !b&&a+c+d+e!=0
C如果白纸实话 c&&a+b+d+e=1
如果谎话 !c&&a+b+d+e!=1
D如果白纸实话 d&&a+b+c+e==4
如果谎话 !d&&a+b+c+e!=4
3.算法设计
穷举法穷举出所有可能情况,判断是否符合情况
4.程序
#include<iostream> using namespace std; int main() { 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 ((a && b + c + d + e==3 || !a && b + c + d + e != 3) &&//判断符不符合逻辑表达式 (b && a + c + d + e==0 || !b && a + c + d + e != 0) && (c && a + b + d + e==1 || !c && a + b + d + e != 1) && (d && a + b + c + e==4 || !d && a + b + c + e != 4)) { cout << a ? "白" : "黑"; cout << b ? "白" : "黑"; cout << c ? "白" : "黑"; cout << d ? "白" : "黑"; cout << e ? "白" : "黑"; } return 0; }
标签:额头,实话,黑纸,白纸,谎话,&&,黑与白 From: https://www.cnblogs.com/lllyclh/p/17429841.html