编程c语言黑与白,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))

代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #include

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色的.\n",a?"白":"黑");

17 printf("B额头上的贴纸是%s色的.\n",b?"白":"黑");

18 printf("C额头上的贴纸是%s色的.\n",c?"白":"黑");

19 printf("D额头上的贴纸是%s色的.\n",d?"白":"黑");

20 printf("E额头上的贴纸是%s色的.\n",e?"白":"黑");

21 }

22 return 0;

23 }

View Code

标签:额头,看见,int,黑与白,白纸,C语言,问题,&&,黑纸

来源: https://www.cnblogs.com/chuyds/p/11986339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值