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

    今天的题目原题是这样的:

    黑与白:
    有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:现在越想越觉得自己是有多蠢啊,明明很简单却花了挺长的时间来做,都有点想放弃做程序员的念头了

  • 相关阅读:
    async 和 await
    Nginx配置反向代理与负载均衡
    简单使用高德地图开放平台API
    layui select 动态赋值
    ERROR: Pool overlaps with other one on this address space
    解决docker镜像无法删除的问题
    伪静态问题导致前台页面无法通过地址栏访问
    ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
    PHP使用引用实现无限极分类
    composer update -- memory_limit
  • 原文地址:https://www.cnblogs.com/mengtree/p/5259784.html
Copyright © 2011-2022 走看看