http://baike.baidu.com/view/68669.htm
很出名的概率问题.
请看百度百科.
我对这个很感兴趣.
流言终结者 第九季 第21集也有做过实验.
求大神模拟跑一下看下结果.

解决方案 »

  1.   

    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次机会胜出。不过这有前提。生活总是跟你使诈,并不一定有人给你正确地指出哪一个门后边是山羊。
      

  2.   

    另外我特意把 Size 和 Award 设置为变量。你可以改变参数试试看,例如将Size设置为5并且将Award设置为3,会是什么结果?你可以看到,假设只有3个门,并且只有一个门后边有奖品,那么这个概率差距确实很大(大于30%)。但是假设门越来越多,奖品数越来越大,那么修改决定和不修改决定的结果概率,就越来越接近了。这说明有些人很偏执,只给自己留很少的“门”,她自然就是和天生的叛徒。
      

  3.   


    谢谢sp大神的回复.我觉得你这个是不对的.
    这是我的测试:+++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    True
    False
    False
    +++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    True
    False
    False
    +++++++++++++++++
    False
    False
    True
    +++++++++++++++++
    True
    False
    False
    3
    7
    请按任意键继续. . .
    模拟游戏十次.
    按你注释的意思.
    其中坚持不变的,一次也没中.
    换门的,中了7次.
    但是最后打印出来说:坚持不变的中了三次.
    应该是第一次开门就开中了三次.而且你这个有点混乱,第一次开门就中的应该过滤掉.
      

  4.   

    To sp大神,
    我运行你这个程序,
    坚持不变的中的概率怎么远低于30分之1.我设置游戏30次.运行好几次都没中过一次.