C趣味程序百例(16)黑与白

文章作者 100test 发表时间 2007:03:10 17:31:32
来源 100Test.Com百考试题网


52.黑与白
有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。五人对坐,每人都可以看到其它人额头上的纸的颜色。五人相互观察后,
A说:“我看见有三人额头上帖的是白纸,一人额头上帖的是黑纸。”
B说:“我看见其它四人额头上帖的都是黑纸。”
C说:“我看见一人额头上帖的是白纸,其它三人额头上帖的是黑纸。”
D说:“我看见四人额头上帖的都是白纸。”
E什么也没说。
现在已知额头上帖黑纸的人说的都是谎话,额头帖白纸的人说的都是实话。问这五人谁的额头是帖白纸,谁的额头是帖黑纸?
*问题分析与算法设计
假如变量A、B、C、D、E表示每个人额头上所帖纸的颜色,0 代表是黑色,1 代表是白色。根据题目中A、B、C、D四人所说的话可以总结出下列关系:
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
穷举每个人额头所帖纸的颜色的所有可能的情况,代入上述表达式中进行推理运算,使上述表达式为“真”的情况就是正确的结果。
*程序与程序注释
#include
void main()
{
int a,b,c,d,e.
for(a=0.a<=1.a ) /*黑色:0 白色:1*/
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 is pasted a piece of %s paper on his forehead.\n",
a?"white":"black").
printf("B is pasted a piece of %s paper on his forehead.\n",
b?"white":"black").

相关文章


报考指南广东省考点介绍
全国等级考试二级计算机模拟考试笔试(一)
C趣味程序百例(16)黑与白
计算机等级考试报考指南河南介绍
06年4月全国计算机等级考试二级Access考试试卷(原题)
C趣味程序百例(16)迷语博士的难题(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛