您的位置:首页 > Web前端 > JavaScript

训练趣题:黑与白 有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。(此处用javascript实现)

2016-03-09 21:35 706 查看
今天的题目原题是这样的:



黑与白:
有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。五人对坐,每人都可以看到其它人额头上的纸的颜色。五人相互观察后,
A说:“我看见有三人额头上帖的是白纸,一人额头上帖的是黑纸。”
B说:“我看见其它四人额头上帖的都是黑纸。”
C说:“我看见一人额头上帖的是白纸,其它三人额头上帖的是黑纸。”
D说:“我看见四人额头上帖的都是白纸。”
E什么也没说。
现在已知额头上帖黑纸的人说的都是谎话,额头帖白纸的人说的都是实话。问这五人谁的额头是帖白纸,谁的额头是帖黑纸?



这个问题跟上一篇的“谁说谎”原理是一样的。

“无论谁都有 黑 跟 白 两种可能”

那我们就能确定有 5 个for进行循环嵌套

for(var A = 0 ;A<=1;A++)
{
for(var B = 0 ;B<=1;B++)
{
for(var C = 0 ;C<=1;C++)
{
for(var D = 0 ;D<=1;D++)
{
for(var E = 0 ;E<=1;E++)
{

//逻辑判断的代码在这里
}
}
}
}
}


接下来我们一句一句的分析:

A说:“我看见有三人额头上帖的是白纸,一人额头上帖的是黑纸。”

那么,A 是白纸的话 有 A==(B+C+D+E==3)==true 如果 A 是黑纸 ,

那 A==(B+C+D+E==3) 依然成立,只是 此时为 A==(B+C+D+E==3)== false 而已 ,所以 我们写 A==(B+C+D+E==3)

B说:“我看见其它四人额头上帖的都是黑纸。”

意思是 B 等于1 的话 B==(A+C+D+E ==0)==true B 不等于 1 的时候也都变为 false 所以也可以写成 B==(A+C+D+E ==0) 或者 B==!(A||C||D||E)

C说:“我看见一人额头上帖的是白纸,其它三人额头上帖的是黑纸。”

同 A 的道理 有 A==(B+C+D+E==3)

D说:“我看见四人额头上帖的都是白纸。”

这里可以写成 D==(A+B+C+E==4) 或者 D==(A&&B&&C&&E)

最后得到的代码是这样的:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
for(var A = 0 ;A<=1;A++)
{
for(var B = 0 ;B<=1;B++)
{
for(var C = 0 ;C<=1;C++)
{
for(var D = 0 ;D<=1;D++)
{
for(var E = 0 ;E<=1;E++)
{
if((B==!(A||C||D||E))&&(D==(A&&B&&C&&E))&&(C==(B+A+D+E==1))&&(A==(B+C+D+E==3)))
alert("a:"+A+"b:"+B+"c:"+C+"d:"+D+"e:"+E);
}
}
}
}
}

</script>


结果 是 : C和E 是白纸,其它的是黑纸

ps:现在越想越觉得自己是有多蠢啊,明明很简单却花了挺长的时间来做,都有点想放弃做程序员的念头了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: