首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求大神写个实验"三门有关问题"看下结果

2013-06-25 
求大神写个实验三门问题看下结果.http://baike.baidu.com/view/68669.htm很出名的概率问题.请看百度百科

求大神写个实验"三门问题"看下结果.

http://baike.baidu.com/view/68669.htm

很出名的概率问题.
请看百度百科.
我对这个很感兴趣.
流言终结者 第九季 第21集也有做过实验.
求大神模拟跑一下看下结果.
[解决办法]
逻辑上是那样的没错啊。问题主要集中在如果最初选的是车的话,修改后肯定会后悔。这种后悔带来的痛苦远比你坚持羊所带来的后悔要深。主要还是考验人心啊。
[解决办法]
public static class 成功机会选择概率问题
{
    const int Size = 3;     //wall数
    const int Award = 1;    //奖品数

    /// <summary>
    /// 进行一次测试。
    /// </summary>
    /// <returns>返回两个bool结果:1. 如果不改变选择,是否猜中;2. 如果改变选择,是否猜中。</returns>
    private static Tuple<bool, bool> testc()
    {
        var gates = (from n in Enumerable.Range(0, Size)
                        orderby Rnd.Next()
                        select n < Award).ToList();
        var guess = Rnd.Next(0, Size);       //首先猜测选择这个
        int open = (from n in Enumerable.Range(0, Size)
                    where n != guess && !gates[n]
                    select n).First();   //选择这个门打开
        int newGuess = (from n in Enumerable.Range(0, Size)
                        where n != guess && n != open
                        orderby Rnd.Next()
                        select n).First();
        return new Tuple<bool, bool>(gates[guess], gates[newGuess]);
    }

    static Random Rnd = new Random();

    static void t1()
    {
        var cn = 10000;     //进行1万次反复测试
        var game = Enumerable.Range(0, cn).Select(x => testc()).ToList();


        var result1 = game.Count(x => x.Item1);      //不改变决定成功次数
        var result2 = game.Count(x => x.Item2);    //改变决定成功次数
        Debug.Assert(result2 > result1 + 3000);
    }

}



执行 t1,你会发现断言通过了——没有异常!这就说明,如果修改决定,至少比坚持决定多3000次机会胜出。

不过这有前提。生活总是跟你使诈,并不一定有人给你正确地指出哪一个门后边是山羊。
[解决办法]
其实关键在于知情的主持人帮助排除了一个错误选项,这是巨大的帮助,而坚持最初选择的话相当于没有利用到这一帮助。
推广到极端情形就很清晰了:一万张彩票,其中一张有奖,我买一张,然后有人帮我把剩下的9998张无奖票全撕了,问我要不要换剩下的一张,如果我不换相当于没有用上他这一巨大的帮助

热点排行