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

C趣味程序百例(16)黑与白,第1张

C趣味程序百例(16)黑与白,第2张

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 for(b = 0;b for(c = 0;c for(d = 0;d for(e = 0;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?“白”:“黑”);
}
}

*跑步成绩
a的正面贴了一张黑纸。(black)
b前面贴了一张黑纸。(black)
C的额头上贴着一张白纸。
D的额头上贴着一张黑纸。
他的额头上贴着一张白纸。(白色)

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C趣味程序百例(16)黑与白

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情