zoukankan      html  css  js  c++  java
  • 该怎么走到通往天堂的桥?

    问题

    忽然想起很早之前看的一道逻辑题,大概是这么说的:

    你经过一个地方有两座桥,其中一座通往地狱,一座通往天空。
    桥的入口各有一个守卫,一个是魔鬼一个是天使,但是外表上无法分别,天使不一定站在天堂前,魔鬼也不一定站在地狱前。
    魔鬼必定撒谎,天使必然说真话。
    你现在只能问其中一个人一个问题,你该咋样走上通往天堂的桥?
    

    记得当时略加思索,毫无思路,直接翻了答案,恍然大悟。

    答案

    随便找两人中的一个,问他:问如果我问另外一个人这座桥通往哪儿,他会怎么说?

    • 如果是天使:
      * 他站在天堂前:通往地狱
      * 他站在地狱前:通往天堂
    • 如果是魔鬼:
      * 他站在天堂前:通往地狱
      * 他站在地狱前:通往天堂

    所以,不过他们回答什么,你选择给他们答案取反就可以了。

    转化为代码

    现在,我想了想,这道题是不是可以转化为一道编程题,用程序来表示这个问题的逻辑。

    直来直去的问

    如果毫无头脑地问,你面前的桥通往哪儿?

    咱们用go语言来表示,对应的代码,如下所示:

    func whetherToHeaven() bool {
    	heaven := true
    	hell := false
    	guards := [][]bool{
    		{heaven, hell},
    		{!heaven, !hell},
    	}
    	guardIndex, bridgeIndex := rand.Intn(2), rand.Intn(2)
    	return guards[guardIndex][bridgeIndex]
    }
    

    你在2*2的可能性里面随机,答案可能是frue也可能是false

    绕着弯儿问

    但是如果你用答案的方式去问,就得到这样的代码

    func toHeaven() bool {
    	heaven := true
    	hell := false
    	guards := [][]bool{
    		{heaven, hell},
    		{!heaven, !hell},
    	}
    	guardIndex := rand.Intn(2)
    	return !guards[guardIndex^1][guardIndex]
    }
    

    这样一来,就得到都是true的答案啦,必然通往天堂。

  • 相关阅读:
    影响stm32仿真的因素
    DMA 如何查看它有没有传输完成 传输完成再开启
    keil出错总结
    一个例子讲解wav头文件 stm32声音程序 录音和播放 wav
    前期绑定 vs 后期绑定
    抽象类 VS 接口 (3)
    抽象类 VS 接口(1)
    封装之--JAVA中的访问修饰符(区别于.NET)
    【DP专题】——洛谷P1156垃圾陷阱
    MySql
  • 原文地址:https://www.cnblogs.com/laolieren/p/how_to_find_bridge_to_heaven.html
Copyright © 2011-2022 走看看