百度面试题-汽水选择问题

查看:94
本文介绍了百度面试题-汽水选择问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在炎炎夏日,你十分口渴,想要买一瓶冰汽水,商店中有三瓶汽水供你选择(如ABC),其中只有一瓶是冰过的。当你选定了其中的某一瓶后(设为A),店员摸了下剩余两瓶中的一瓶(设为B),并告诉你B不是冰的,此时你会将你的选择变更为剩余的那瓶嘛(C)?请详述你的理由?

电话面试的面试题,大致意思如下,请问这种问题该如何思考。

解决方案

9月9日更新一段Python代码,来验证三门问题换和不换的具体概率,实验进行1000轮,具体方案见代码注释。

白天可能由于网络缘故,代码一直提交不上,现已更新。

# coding=utf-8
# Name: 三门问题概率实验
# Author: X_AirDu
# Python Version: 2.7.9
# Describe: 实验前提为售货员说实话

import random

# 种子为0, 0, 1,其中1为正确答案(即冰汽水)
seed = [0, 0, 1]
# 存放问题的容器,目的为统计概率,基本结构为[[0, 0, 1], [1, 0, 0]...]
holder = []
# 容器总量
total = 0

def init():
    '''以seed为种子随机生成1000个问题并存于容器中'''
    for i in range(1000):
        holder.append(random.sample(seed, 3))
    global total
    total = float(len(holder))
    
def change():
    correct = 0.    # 选择正确的次数
    choose_num = 0    # 本回合选择的序号
    choose = 0    # 本回合的选择
    # 遍历容器,得到每个问题[0或1, 0或1, 0或1]列表
    for each in holder:
        # 随机生成0, 1, 2作为本回合选择想,分别对应第0瓶汽水,第1瓶汽水,第2瓶汽水
        choose_num = random.randint(0, 2)
        # 遍历问题,j为门(汽水)的下标,gate为具体门的值0或1(0非冰,1冰汽水)
        for gate in each:
            # 已选择的忽略
            if j == choose_num:
                continue
            '''
            下面解释一下:
            如果 gate == 0,非冰,相当于售货员告诉你非冰
            然后 continue,选择剩下的最后一瓶
            
            如果 gate != 0,冰,相当于售货员告诉你剩下的最后一瓶是非冰
            直接选择当前 gate
            '''
            if not gate:
                continue
            choose = gate
            if choose:
                correct += 1
    print '换之后正确的概率为:{0}%.'.format(correct/total * 100)

def not_change():
    correct = 0.
    choose_num = 0
    for each in holder:
        choose_num = random.randint(0, 2)
        for j, gate in enumerate(each):
            '''
            无论如何都不换
            '''
            if j == choose_num:
                if gate:
                    correct += 1
                    break
    print '不换时正确的概率为:{0}%.'.format(correct/total * 100)
    
if __name__ == '__main__':
    init()
    change()
    not_change()

输出结果:

换之后正确的概率为:67.9%.
不换时正确的概率为:31.3%.

如果把问题数增加到足够大,譬如1000,000次,则最终结果无限接近2/3和1/3。

各位有Python条件的可以用此代码自行验证。

==============================分割线===================================
原答案:

三门问题,一定要换。

原本三瓶中冰的概率均为1/3:

A: 1/3
B: 1/3
C: 1/3

假设我们可以选两瓶,那么我们拿到冰的概率就变成了2/3。

而此时售货员得到冰的概率就是2/3,因为我们选择了A,他还有两瓶B和C。

也就是说,B和C中,有任意一瓶是冰的概率为2/3,然后售货员帮我们排除了一个不是冰的B,但因为B和C中有冰的概率为2/3,因此当B这个错误答案被排除后,C就相当于之前B和C的整体,因此,C是冰的概率为2/3。

这篇关于百度面试题-汽水选择问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆