C语言黑与白问题代码及解析(内附视频)
问题描述
有A、B、C、D、E这5个人,每个人额头上都帖了一张黑或白的纸。5人对坐,每 个人都可以看到其他人额头上纸的颜色。5人相互观察后:
A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑纸。”
B说:“我看见其他4人额头上贴的都是黑纸。”
C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸 。”
D说:“我看见4人额头上贴的都是白纸。”
E什么也没说。
现在己知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这5人 谁的额头上贴的是白纸,谁的额头上贴的是黑纸?
问题分析
该问题是一个逻辑推理问题。分析A、B、C、D这4个人所说的话可以得出4个条件。假设用变量a、b、c、d、e分别代表A、B、C、D、E这5个人额头上贴纸的颜色,当变量的取值为1时表示该人额头上贴纸的颜色为白色,当变量取值为0时表示该人额头上贴纸的颜色为黑色。则分析题目中4个人所说的话如下:
(1) A说:“我看见有3人额头上帖的是白纸,1人额头上贴的是黑纸。”
如果A额头上贴的是白纸,那么他说的是实话,则有表达式:
a&&b+c+d+e==3
如果A额头上贴的是黑纸,那么他说的是谎话,则有表达式:
!a&&b+c+d+e!=3
(2) B说:“我看见其他4人额头上贴的都是黑纸。”
如果B额头上贴的是白纸,那么他说的是实话,则有表达式:
b&&a+c+d+e==0
如果B额头上贴的是黑纸,那么他说的是谎话,则有表达式:
!b&&a+c+d+e!=0
小编分类整理了许多C语言进阶学习材料和BAT面试题,需要资料的请进Q群:731611386免费领取
(3) C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸。”
如果C额头上贴的是白纸,那么他说的是实话,则有表达式:
c&&a+b+d+e=1
如果C额头上贴的是黑纸,那么他说的是谎话,则有表达式:
!c&&a+b+d+e!=1
(4) D说:“我看见4人额头上贴的都是白纸。”
如果D额头上贴的是白纸,那么他说的是实话,则有表达式:
d&&a+b+c+e==4
如果D额头上贴的是黑纸,那么他说的是谎话,则有表达式:
!d&&a+b+c+e!=4
算法设计
求解逻辑推理类问题的关键就是写出正确的逻辑表达式。将问题分析中列出的限定条件用程序语言描述清楚后就可以使用穷举法来获得最终的判断结果。
下面使用C语言中的逻辑表达式,将问题分析中得到的几个条件表达出来,得到的逻辑表达式如下:
(a&&b+c+d+e3 || !a&&b+c+d+e!=3) &&
(b&&a+c+d+e0 || !b&&a+c+d+e!=0) &&
(c&&a+b+d+e1 || !c&&a+b+d+e!=1) &&
(d&&a+b+c+e4 || !d&&a+b+c+e!=4)
在程序中穷举每个人额头帖纸的颜色的所有可能的情况,并代入上面的逻辑表达式中进行推理运算,能使该逻辑表达式的值为真的结果就是正确的结果。
小编分类整理了许多C语言进阶学习材料和BAT面试题,需要资料的请进Q群:731611386免费领取
下面是完整的代码:
#include<stdio.h>
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+e3 || !a&&b+c+d+e!=3) &&
(b&&a+c+d+e0 || !b&&a+c+d+e!=0) &&
(c&&a+b+d+e1 || !c&&a+b+d+e!=1) &&
(d&&a+b+c+e4 || !d&&a+b+c+e!=4)
)
{
printf(“A额头上的贴纸是%s色的.\n”,a?“白”:“黑”);
printf(“B额头上的贴纸是%s色的.\n”,b?“白”:“黑”);
printf(“C额头上的贴纸是%s色的.\n”,c?“白”:“黑”);
printf(“D额头上的贴纸是%s色的.\n”,d?“白”:“黑”);
printf(“E额头上的贴纸是%s色的.\n”,e?“白”:“黑”);
}
return 0;
}
运行结果:
A额头上的贴纸是黑色的.
B额头上的贴纸是黑色的.
C额头上的贴纸是白色的.
D额头上的贴纸是黑色的.
E额头上的贴纸是白色的.
小编分类整理了许多C语言进阶学习材料和BAT面试题,需要资料的请进Q群:731611386免费领取
- C语言谁是窃贼问题代码及解析
- C语言编程狼追兔子问题代码解析
- C语言委派任务问题代码及解析
- C语言解决常胜将军问题代码解析
- C语言百钱百鸡问题代码及解析
- C语言typedef与复杂函数声明问题的深入解析
- 棋盘覆盖问题、半数集问题算法解析-C语言
- 解决 html 代码不解析 的问题
- [转载] 问题解决:FFmpeg视频编解码库,无法解析的外部信号
- 易语言通过解析破解艾奇学院的收费视频的代码
- EasyRTMP视频直播推送H264 sps解析错误导致播放画面拉伸问题解决
- 01背包问题--C语言代码
- opencv视频获取显示代码问题和调试
- C语言将一个正整数分解质因数代码及解析
- 利用简洁的C语言代码解决跳台阶问题与约瑟夫环问题
- 视频文件头解析--avi-代码解析
- 三色球和荷兰国旗问题 分析 c语言代码详解
- c语言实现基数排序解析及代码示例
- EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题
- linux下php代码不执行、不解析问题