额头上的贴纸问题
问题描述
有A、B、C、D、E这5个人,每个人额头上都帖了一张黑或白的纸。5人对坐,每 个人都可以看到其他人额头上纸的颜色。5人相互观察后:
A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑纸。”
B说:“我看见其他4人额头上贴的都是黑纸。”
C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸 。”
D说:“我看见4人额头上贴的都是白纸。”
E什么也没说。
现在己知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这5人 谁的额头上贴的是白纸,谁的额头上贴的是黑纸?
思路:
由于题目末尾介绍贴黑纸的就是贴谎话,贴白纸的就是实话。因此,我们将5个人的话翻译过来,那就是:
A:“3人实话,1人谎话。”
B:“4人谎话”
C:“1人实话,3人谎话。”
D:“4人实话”
E不发言。
用表达式进一步表示(0为撒谎,1为诚实),则有:
如果a的话为真,则:
a&&b+c+d+e==3
否则:
!a&&b+c+d+e!=3
其他亦然(考虑文本有限,不再过多表述)。
因此,本题我采用穷举法的思路完成。
#include
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)
)
//*三目运算符运用
{
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额头上的贴纸是白色的.
推荐阅读
- 使用ApiPost的个人感受
- 详细剖析pyecharts大屏的Page函数配置文件:chart_config.json
- Android开发 关于navigation destination xxx is unknown to this NavController 报错的复现分析与解决
- uniapp下uni.request请求的封装
- appiumappium-desktop的使用
- Android TabLayout 平板下不能铺满全屏的问题
- Mybatis之通用mapper使用注解的方式写动态sql-小结
- 百度DMA+小度App的蓝牙语音解决方案展示
- 01uni-app的创建运行在不同端上的配置tarBar的配置
- Android布局管理器-从实例入手学习相对布局管理器的使用