黑与白

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;
}

 

posted @ 2023-05-24 23:08  酥饼馅红豆沙  阅读(11)  评论(0编辑  收藏  举报