通往天堂的选择问题 python_该怎么走到通往天堂的桥?

383cf53aaf13f53c31922000abdff3d1.png

问题

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

你经过一个地方有两座桥,其中一座通往地狱,一座通往天空。

桥的入口各有一个守卫,一个是魔鬼一个是天使,但是外表上无法分别,天使不一定站在天堂前,魔鬼也不一定站在地狱前。

魔鬼必定撒谎,天使必然说真话。

你现在只能问其中一个人一个问题,你该咋样走上通往天堂的桥?

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

答案

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

如果是天使:

* 他站在天堂前:通往地狱

* 他站在地狱前:通往天堂

如果是魔鬼:

* 他站在天堂前:通往地狱

* 他站在地狱前:通往天堂

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

转化为代码

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

直来直去的问

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

咱们用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的答案啦,必然通往天堂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值