• C语言黑与白问题


    问题描述:

             有A、B、C、D、E这5个人,每个人额头上都帖了一张黑或白的纸。5人对坐,每 个人都可以看到其他人额头上纸的颜色。5人相互观察后:

    • A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑纸。”
    • B说:“我看见其他4人额头上贴的都是黑纸。”
    • C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸 。”
    • D说:“我看见4人额头上贴的都是白纸。”
    • E什么也没说。


    现在己知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这5人 谁的额头上贴的是白纸,谁的额头上贴的是黑纸?

    问题分析:

    呃呃,刚开始推出来了正确答案,被学弟问的不会用代码写了...

    分析每个人说的话,对于每个人来说只有两种情况,说谎或者说的是真话,把所有情况暴力枚举,选出来合适的答案即可

    求解逻辑推理类问题的关键就是写出正确的逻辑表达式。将问题分析中列出的限定条件用程序语言描述清楚后就可以使用穷举法来获得最终的判断结果。

    用 0 表示贴的是黑纸,1 表示贴的是白纸

    判断条件:

    1 (a && (b+c+d+e==3) || !a && (b+c+d+e!=3)) &&
    2 (b && (a+c+d+e==0) || !b && (a+c+d+e!=0)) &&
    3 (c && (a+b+d+e==1) || !c && (a+b+d+e!=1)) &&
    4 (d && (a+b+c+e==4) || !d && (a+b+c+e!=4))

    代码:

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a, b, c, d, e;  /*0表示黑色,1表示白色*/
     5     for(a=0; a<=1; a++)  /*穷举五个人额头帖纸颜色的全部可能*/
     6         for(b=0; b<=1; b++)
     7             for(c=0; c<=1; c++)
     8                 for(d=0; d<=1; d++)
     9                     for(e=0; e<=1; e++)
    10                         if( (a && (b+c+d+e==3) || !a && (b+c+d+e!=3)) &&
    11                             (b && (a+c+d+e==0) || !b && (a+c+d+e!=0)) &&
    12                             (c && (a+b+d+e==1) || !c && (a+b+d+e!=1)) &&
    13                             (d && (a+b+c+e==4) || !d && (a+b+c+e!=4))
    14                         )
    15                         {
    16                             printf("A额头上的贴纸是%s色的.
    ",a?"":"");
    17                             printf("B额头上的贴纸是%s色的.
    ",b?"":"");
    18                             printf("C额头上的贴纸是%s色的.
    ",c?"":"");
    19                             printf("D额头上的贴纸是%s色的.
    ",d?"":"");
    20                             printf("E额头上的贴纸是%s色的.
    ",e?"":"");
    21                         }
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    C++三大特性之多态
    内向者沟通圣经:4P法(Preparation,Presence,Push,Practice)
    RTP/RTCP、TCP、UDP、RTMP、RTSP
    网络七层协议
    预防U盘被病毒侵害的方法
    Win8安装程序出现2502、2503错误解决方法
    小L的区间求和
    【剑指offer-12】矩阵中的路径
    【剑指offer】数值的整数次方
    【剑指offer】二进制中1的个数
  • 原文地址:https://www.cnblogs.com/chuyds/p/11986339.html
Copyright © 2020-2023  润新知