chanji 发表于 2020-12-27 10:51

三门问题

本帖最后由 chanji 于 2020-12-27 11:03 编辑

三门问题(换门):
#include <iostream>
#include <cstdlib>
#include <ctime>
#define random(a,b) (rand() % (b-a+1))+ a
using namespace std;

int main()
{
    srand((int)time(0));
    int doors;   
    int mode;
    int choose;
    int result;
    int success = 0;
    for(int i = 0;i < 10000;++i) {//模拟一万次
      mode = random(1,3);//3门问题的排列组合总共有三种情况
      if(mode == 1) {//模式一是前两个门是羊,后一个门是汽车
            doors = 1;
            doors = 1;
            doors = 2;
            choose = random(0,2);//玩家随机选择其中一个门
            if(choose == 0) {//根据规则得到结果
                result = 2;
            }
            else if(choose == 1) {
                result = 2;
            }
            else {
                result = 0;
            }
            if(doors == 2) {//判断门后是否为汽车,如果为汽车,则统计量加1
                ++success;
            }
      }
      else if(mode == 2) {//模式二为车、羊、羊
            doors = 2;
            doors = 1;
            doors = 1;
            choose = random(0,2);
            if(choose == 0) {
                result = 1;
            }
            else if(choose == 1) {
                result = 0;
            }
            else {
                result = 0;
            }
            if(doors == 2) {
                ++success;
            }
      }
      else {//模式三为羊、车、羊
            doors = 1;
            doors = 2;
            doors = 1;
            choose = random(0,2);
            if(choose == 0) {
                result = 1;
            }
            else if(choose == 1) {
                result = 0;
            }
            else {
                result = 1;
            }
            if(doors == 2) {
                ++success;
            }
      }
    }

    cout << success << endl;//输出成功的总数
    return 0;
}
三门问题(不换门):
#include <iostream>
#include <cstdlib>
#include <ctime>
#define random(a,b) (rand() % (b-a+1))+ a
using namespace std;
void game(int &success);//模拟做出选择后不更改的函数
int doors;
int main()
{
    srand((int)time(0));
    int mode;
    int choose;
    int result;
    int success = 0;
    for(int i = 0;i < 10000;++i) {//实验一万次
      mode = random(1,3);//3门问题的排列组合总共有三种情况
      if(mode == 1) {//模式一是前两个门是羊,后一个门是汽车
            doors = 1;
            doors = 1;
            doors = 2;
            game(success);
      }
      else if(mode == 2) {//模式二为车、羊、羊
            doors = 2;
            doors = 1;
            doors = 1;
            game(success);
      }
      else {//模式三为羊、车、羊
            doors = 1;
            doors = 2;
            doors = 1;
            game(success);
      }
    }
    cout << success << endl;//输出成功的总数
    return 0;
}
void game(int &success) {
    int result;
    result = random(0,2);//随机选择一扇门
    if(doors == 2) {//如果选对了,统计量+1
      ++success;
    }
}
结果:
换门后成功拿到汽车的频率10组数据如下,都接近三分之二(0.6666)
0.6692
0.6717
0.6697
0.669
0.6616
0.6712
0.6663
0.6693
0.6656
0.6686
不换门成功拿到汽车的频率10组数据如下,都接近三分之一(0.3333)
0.3409
0.3325
0.3399
0.3388
0.3354
0.3289
0.3337
0.3337
0.3343
0.3342
由此可见,三门问题的结论是正确的。
页: [1]
查看完整版本: 三门问题