最近有一个粉丝问一道面试题,我一看,这不是经典的“蒙提霍尔悖论”嘛!

据不完全统计,面对这个经典的统计悖论,80%的人凭直觉做出了错误的选择,然而他们却坚信自己才是对的。不信?那就和我一起穿越下。

我,莫名其妙的出现在舞台中央,所有聚光灯齐齐射来,突如其来的强光刺的我睁不开眼,只听见场下震耳欲聋的呐喊“坚持你的选择!坚持你的选择!”

我赶紧捋了捋脑中残存的思绪,原来,我穿越到另一个有奖闯关者身上。他一路披荆斩棘,KO掉来自全国的所有竞争对手,此刻,正面临最后一个挑战,眼前5000万大奖唾手可得,万万没想到被我给穿(挤)下线了。

最后一关,是一个叫做“决定”的挑战,奖金高达5000万元:

生存,还是毁灭,这是一个问题。换,还是不换,这也是一个问题。

乍一看,第一步就是TMD盲选啊,而且被我挤下线的那个倒霉虫已经遵循“什么不会就选C”的选择题黄金定律选择了C门。

此刻,主持人友善的打开了B门,门后空空如也,然后狡黠一笑,挑着眉问:“先生,你是坚持最初的选择C呢?还是投向A门的怀抱?”

“坚持你的选择!不要做临阵变卦的蠢货!”观众嘶声力竭。

我有点懵逼,毕竟没怎么经历过这么大的阵仗,赶紧紧闭双眼,试图让注意力集中,嘴里念念有词的回忆当年做选择题的要诀:

  • 三长一短就选短

  • 三短一长就选长

  • 参差不齐就选D

  • 三个选项就蒙C

从经验的角度来看,蒙C的确是目前的最优选项啊!我清了清嗓子,笃定的开腔”我坚持我最初的选择!”

主持人笑出了鱼尾纹,优雅的打开了所有的门,C门后空空如也,而A门后则是金光闪闪的终极大奖。

擦!大奖擦擦擦擦肩而过!

“看呐!你终于为自己的固执付出代价了!”观众瞬间换了腔调,嘲讽的声浪几乎把人吞没。

我胸口越来越闷,一股气拧成团堵在嗓子眼,尽全力想呼出救命却发不出任何声音,突然,眼前一片漆黑。

不知过了多久,再次被强光刺醒,发现自己又回到了舞台中央,再次听见震耳欲聋的呐喊“坚持你的选择!坚持你的选择!”《恐怖游轮》中无线循环的场景闯入脑中,一声声卧槽在心中回荡。

“哥们,是你把我挤下线了吧!就你这智商,还想赢大奖?”脑海中另一个声音无比清晰。

我不禁回应道:“刚才C还不是你选的,我只是错信了傻X而已”

“告诉你吧,第一次的选择并不重要,关键在于,在主持人帮你打开一扇门之后,一定要改变最初的选择!

“扯吧你,改了选项之后的选择题,一定是错的,当我不知道考场潜规则嘛!”我是个经验主义者,对他的话表露出一脸不屑。

“这样吧,蠢货,我换个思路给你讲清楚,总体逻辑其实是一样的。

假设你现在面前有1000扇门,只有一扇门背后藏着奖品,你第一次随便选一个门,然后主持人会帮你在你没选择的999扇门中打开998扇没有奖品的门,现在场上还剩你最初选择的那个门,和主持人帮你排除之后的一个门,你换不换?”

“这个,当然是换的中奖概率更大!但是我们这个玩法好像不太一样吧”我似懂非懂。

“三扇门选择的逻辑也是一样的!只是样本量不同而已!”他扯着嗓子怒吼。

“我就是不信,刚才其实只是运气不好,再来一轮准没问题!”于是,我又一轮坚持自己的选择,又一次与大奖擦肩而过,又一次胸闷,又一次回到了重生点。

“哥,我为什么运气这么差!”我被这突如其来的循环穿越搞的近乎绝望,只想尽快逃出这个鬼循环。

“说白了,你不改变选择,中奖概率只有1/3,一旦改变了选择,中奖概率就会上升到2/3了”他直接抛出了结论,而且语气平和了许多,好像已经习惯了我的脑回路。

看着我紧皱的眉心,他叹了口气:“闭上眼睛吧,我带你到思维的平行世界,用逻辑和Python代码给你演示,演到你服为止”

在我们面前有3个门,大奖藏在某个门背后,我们给大奖所在的门编个号(1号,2号,3号),在1,2,3之间随机生成,生成几就表示大奖在几号门。要让你信服,我们会玩很多轮,所以定义一个函数,默认是生成100轮的正确答案(也就是玩100次)。

#这里我们默认是玩100轮
def gen_random(num = 100):#奖品在1,2,3号门中随机出现lst = np.random.randint(1,4,size = num)return lst

猜法一,坚持最初的选择

猜法一就是盲猜,我们从1,2,3个门中随机猜一个,且不会因为主持人的干扰而改变想法,所以开始猜什么最终也就是什么,猜法一比较简单,我们直接定义一个函数:

#定义基于第一种猜法的函数
def guess_one(num = 100):#生成正确的答案lst = gen_random(num)#猜的轮数和前面生成的轮数一致,这里默认玩100次(生成100次正确答案,对应猜100次)guess = np.random.randint(1,4,size = len(lst))#计算有多少个正确的,相等即为正确,最终返回FALSE和TRUE的序列judge = (lst == guess)#因为TRUE默认是1,FALSE默认是0,我们直接求和,来计算正确率是多少correct_rate = judge.sum() / len(judge)print('Bro,这次我们玩%d轮~' % num)print('在第二次不改变选择的策略下,你最终的中奖率是:%.2f' % (correct_rate * 100))

  猜法二,改变最初的选择 

猜法二,从1,2,3个门中随机猜一个,当主持人打开一个空门,改变最初的选择。

无论我们首次的选择是否中奖,在主持人第一次打开门阶段,我们选择的门不会被打开,背后是大奖的门也不会被打开(有时候可能是同一个)。

先生成数据:

#和上面一样,随机生成100次正确答案
lst = gen_random(num)#第一步,依然是随机猜100次
guess = np.random.randint(1,4,size = len(lst))#因为第二次我们会改变选择,这里创建一个列表来存储我们改变后的最终选择
guess_change = []
  • 场景一:我们第一次猜的门没有奖品

如果正确答案和我们第一次猜的不一致,主持人排除掉一个门(空门)之后我们改变选择,最终选的肯定是正确答案。举个栗子:当我们选择的是A门,大奖藏在B门,那主持人帮我们打开的空门一定是C门,然后问我们是否改变选择。如果我们第一步猜的和正确答案不一致,改变选择之后一定会中奖。

#循环遍历每一轮的正确答案和我们第一步猜的结果
for anwser,g in zip(lst,guess):#当答案和我们猜的不一样,那我们改变选择之后就是正确答案if anwser != g:guess_change.append(anwser)
  • 场景二:我们第一次就猜对了

当我们猜的门和正确答案一致,主持人随机打开一扇门之后,我们会选择剩下一扇未被打开的空门。

继续举栗子:如果我们猜的A门,大奖就在A门,那么真理既然被我们选中,主持人在没有奖的B和C门中随机打开一扇都可以,然后问我们是否change,要是B门被打开,那么剩下A(我们第一步选择的)和C门,我们改变立场会投向C门的怀抱,结果就是大奖飞走了。

#如果我们第一次就猜到正确答案
if anwser == g:#生成一个正确答案的范围anwser_range = [1,2,3]#由于我们猜的就是正确答案,先排除掉(因为最后我们会改变选择)anwser_range.remove(anwser)#主持人在我们选择之外随机打开一个门anwser_range.remove(anwser_range[random.randint(0,1)])#剩下的一个就是我们最终选择的门guess_change.append(anwser_range[0])

第二个场景我们也可以顺手封装成一个完整函数,这个注释更加完整:

def guess_two(num = 100):#和上面一样,随机生成100次正确答案lst = gen_random(num)#第一步,依然是随机猜100次guess = np.random.randint(1,4,size = len(lst))#因为第二次我们会改变选择,这里创建一个列表来存储我们改变后的最终选择guess_change = []for anwser,g in zip(lst,guess):#无论是否中奖,在主持人第一次打开门阶段,我们选择的门不会被打开,背后是大奖的门也不会被打开(有时候可能是同一个)#举个栗子:当我们选择的是A门,大奖藏在B门,那主持人帮我们打开的空门一定是C门,然后问我们是否改变选择#也就是说,当我们第一步猜的和正确答案不一致,改变选择之后一定会中奖#anwser是正确答案,g是我们第一步猜的if anwser != g:#如果正确答案和我们第一次猜的不一致,主持人排除掉一个门之后我们那改变选择,肯定选的是正确答案——iguess_change.append(anwser)else:#当我们猜的门和正确答案一致,主持人随机打开一扇门之后,我们会选择剩下的一扇未被打开的空门#继续举栗子:如果我们猜的A门,大奖就在A门,那么真理既然被我们选中,主持人在没有奖的B和C门中随机打开一扇都可以#然后问我们是否change,要是B门被打开,那么剩下A(我们第一步选择的)和C门,我们改变立场会转向C门,结果就是大奖飞走了anwser_range = [1,2,3]#我们选择的就是正确答案,先排除掉(因为最后我们会改变选择)anwser_range.remove(anwser)#主持人随机打开一个门anwser_range.remove(anwser_range[random.randint(0,1)])#剩下的一个就是我们最终选择的门guess_change.append(anwser_range[0])#到这一步,我们对刚才改变选择之后的结果进行汇总guess_change = np.array(guess_change)#看看猜对了多少轮judge = (lst == guess_change)#正确率是多少correct_rate = judge.sum() / len(judge)print('Bro,这次我们玩%d轮~' % num)print('在第二次改变选择的策略下,你最终的中奖率是:%.2f' % (correct_rate * 100))

接下来,每种猜法分别玩10,100,1000直到1000万次。

猜法一:

猜法二:

坚持选择,获奖概率最终会稳定在33%,改变选择,最终会稳定在66%。在铁一般的事实面前,我完全信服了。

看着我错愕的眼神,他切掉了这个平行世界的代码界面,消失前脸上露出了一副“聪明人的快乐,就是这么朴实无华且枯燥”的表情。

聚光灯又一次打在我的身上,耳畔再次响起了主持人性感的声音:“先生,您是否改变最初的选择”。

已经记不清第一步是谁做出的选择,也不知道选的什么门,但是笃定的喊道:“改就完事儿了!

最终选择的门缓缓打开,大奖藏在其后!5000万!!!

在全场的欢呼声中,凭着我丰富的韭菜经验,一瞬间便规划好了理财方针:

  • 5000万的大奖,先交税,再花1000万成立分析师不加班基金会

  • 1000万杀入股市,等着年化100%的收益率

  • 接着,1000万梭哈元宇宙,作为传家宝代代相传

  • 最后,剩下的...

话音未落,眼前一黑。

我,大奖得主,韭菜大拿,不知道被谁挤下线了...

以上。

记一道80%的人会答错的牛X面试题!相关推荐

  1. 这道 Go 题目外网超过 80% 的人都答错了,你来试试...

    本文转载自公众号「脑子进煎鱼了」 最近在冲浪的时候,看到 Redhat 首席软件工程师.Prometheus 等项目的维护者 Bartłomiej Płotka 在 twitter 上出了一道 Go ...

  2. 面试官:为什么要尽量避免使用 IN 和 NOT IN?大部分人都会答错!

    作者:Hydor 来源:https://www.cnblogs.com/hydor/p/5391556.html WHY? IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢? 1.效率低 ...

  3. java一个类多次加载_据说99.99%的人都会答错的类加载问题

    概述 首先还是把问题抛给大家,这个问题也是我厂同学在做一个性能分析产品的时候碰到的一个问题. 同一个类加载器对象是否可以加载同一个类文件多次并且得到多个Class对象而都可以被java层使用吗? 请仔 ...

  4. 支付宝二面:使用 try-catch 捕获异常会影响性能吗?大部分人都会答错!

    不知道从何时起,传出了这么一句话:Java中使用try catch 会严重影响性能. 然而,事实真的如此么?我们对try catch 应该畏之如猛虎么? 一.JVM 异常处理逻辑 Java 程序中显式 ...

  5. 如果要存 IP 地址,用什么数据类型比较好?大部人都会答错!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/mhmyqn/article/details/48653157 在看高性能MySQL第3版(4.1 ...

  6. 90% 的人都会答错的面试题 == 和 equals 的区别

    == 和 equals 的区别是什么? == 解读 对于基本类型和引用类型,== 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同: 引用类型:比较的是引用是否相同: 代码示例: Stri ...

  7. 容易答错的java面试题_Java程序员面试中最容易答错的8道面试题,你中招了吗?...

    1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量.静态方法.静态类. 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不 ...

  8. 一道关于 json 和 slice 的题难倒了 80% 的人

    在 Go语言爱好者周刊:第 65 期 刊首语发了一道题,以下代码输出什么? package main import (  "encoding/json"  "fmt&qu ...

  9. 替换元素_80%的前端会答错的问题:lt;imggt;是什么元素?

    前言 某天晚上,和几个朋友去撸串,突然就聊到了面试,都在感叹现在的面试题太变态了,其中一个突然很神秘的问我:"你写前端这么久了,那你知道 <img> 是什么元素吗?" ...

  10. 80%的人答错,苹果logo上的叶子到底朝左还是朝右?

    苹果手机大家应该都有了解,但是你能区分出它真正的logo吗?本文主要介绍运用Python中的turtle库控制函数绘制苹果logo和相似图案,据说80%的人都选错了.       一.效果展示    ...

最新文章

  1. #6280. 数列分块入门 4(区间修改,区间查询)
  2. 微生物组——宏基因组分析专题培训开课啦!!!
  3. Redis介绍使用及进阶
  4. [hdu4333]Revolving Digits
  5. Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用
  6. Centos下重要日志文件及查看方式
  7. HadoopIO和javaIO的区别
  8. jvm ide_通过微调JVM Garbage Collector减少Java IDE滞后
  9. 分布式精华问答 | 分布式系统面临哪些挑战?​
  10. Python如何在循环语句中加入两个变量_Python基础知识
  11. HU6285A升压输出12V,电流1A芯片
  12. 大学学计算机考试大一,大学计算机基础大一考试必备题库[1].pdf
  13. idea 查看方法在哪被调用快捷键_IntelliJ IDEA最常用快捷键快速查看手册-工欲善其事,必先利其器...
  14. Pi-hole黑洞(广告屏蔽)列表的维护思路
  15. 【扩展】Freemarker模板遍历集合实现下载word部分文字隐藏
  16. 数字图像处理:数值图像的文件格式总结
  17. 微信公众号网页授权登录完整步骤版学不会你打我....
  18. 《O N E 影视厅》管理系统——WAMP架构win10+apache+mysql+php
  19. Python 智能聊天机器人的实现
  20. 走近古人的生活 衣食住行

热门文章

  1. eToken 身份认证
  2. 鹿晗关晓彤公开恋情,是如何把新浪微博的服务器搞垮的?
  3. PowerShell报错:无法加载文件C:\Users\server\Documents\windowsPowerShell\profile.ps1...
  4. Flutter CircularProgressIndicator圆形进度指示器
  5. C/C++项目:魂斗罗游戏
  6. 如何利用STM32和迪文串口屏以及WIFI模组进行数据交互
  7. go语言报错reflect: reflect.Value.SetInt using value obtained using unexported field 解决方法
  8. [渝粤教育] 中国地质大学 计算机会计理论与实务 复习题
  9. paperJS中使用lab,lch等颜色
  10. 这部关于 AI 的纪录片,还是值得一看的