• 羊车门问题


    题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。

    1、按照你的第一感觉回答,你觉得不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?

    答:我的第一感觉,当然是换不换得到车的概率都一样啊,有啥区别吗,概率都一样吧

    2、请自己认真分析一下“不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?” 写出你分析的思路和结果。

    答:其实我是先做的第三步,写代码的思路是通过多次随机试验得到的结果进行判断

    上边这个截图就是我进行了1000000次随机试验之后得到的结果,明显是更换选择比不更换选择更容易的到汽车,更换选择得到汽车的概率占总共得到汽车概率的2/3

    得到这个结果之后开始仔细的分析,代码应该是没错的,那就开始编答案往结果上凑吧。

    以下是我的分析过程:

            大概是有四种情况:不换选择得到汽车         更换选择得到汽车     

                                            不换选择得不到汽车      更换选择得不到汽车。

            首先是第一种情况,不换选择得到汽车,这就需要第一次选择的时候选择了1/3概率的有车的门,然后执行了有1/2概率的不换选择操作,所以第一种情况的概率是1/3*1/2=1/6

            同理第二种情况,不换选择得不到汽车,首先选择了2/3概率的有羊的门,然后执行了1/2概率的不换选择操作,所以第二种情况的概率是2/3*1/2=1/3

            同理第三种情况更换选择得到汽车的概率是2/3*1/2=1/3,第四种情况更换选择得不到汽车的概率是1/3*1/2=1/6

    所以得到的结果是更换选择比更换选择得到汽车的概率更大,更换选择得到汽车的概率占总共得到汽车概率的2/3

    3、请设法编写程序验证自己的想法,验证的结果支持了你的分析结果,还是没有支持你的分析结果,请写出程序运行结果,以及其是否支持你的分析。(提示:可以借助随机数函数完成此程序)

    答:因为先用代码得到的结果然后再进行的分析,所以我的结论当然支持了我的代码

    4、请附上你的代码。(提示:使用编辑器中的插入代码功能,将代码显示为 Python 风格)

    代码如下:

    import random
    def rand():
        n=random.randint(1,3)
        return n
    TIMES=eval(input("实验次数:"))
    TimesChange=0
    TimesChangeCar=0
    TimesCar=0
    def major():
        global TimesChange
        global TimesChangeCar
        global TimesCar
        car=random.randint(1,3)
        choice=rand()
        opendoor=rand()
        while True:
            if opendoor==car or opendoor==choice:
                opendoor=rand()
            else:
                print("{}号门后是车,选手选择{}号门,主持人打开{}号门".format(car,choice,opendoor))
                break
        change=random.randint(0,1)
        if change==0:
            print("选手坚持自己的选择,他得到的是{}".format("汽车" if car==choice else "山羊"))
        else:
            TimesChange=TimesChange+1
            print("选手更换自己的选择,他得到的是{}".format("山羊" if car==choice else "汽车"))
        if change==1 and choice!=car:
            TimesCar=TimesCar+1
            TimesChangeCar=TimesChangeCar+1
        if change==0 and choice==car:
            TimesCar=TimesCar+1
        print("***********")
    for i in range (TIMES):
        major()
    print("{}次随机实验中,选手更换选择{}次,共得到汽车{}次,更换选择之后得到汽车{}次".format(TIMES,TimesChange,TimesCar,TimesChangeCar))
  • 相关阅读:
    IIS7中启用JS的压缩
    .NET中使用WINDOWS API参数定义
    IE6下的JQUERY_FCK兼容问题
    移动native+HTML5混搭应用感受
    【翻译】Fixie.js——自动填充内容的插件
    JSON辅助格式化
    【记录】导致notifyDataSetChanged无效的一个错误
    【Perl】批量word和PPT文档转pdf
    【记录】有关parseInt的讨论
    手机滑动应用
  • 原文地址:https://www.cnblogs.com/qq147650/p/8977228.html
Copyright © 2020-2023  润新知