数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 331|回复: 0

三门问题

[复制链接]
发表于 2020-12-27 10:51 | 显示全部楼层 |阅读模式
本帖最后由 chanji 于 2020-12-27 11:03 编辑

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

  6. int main()
  7. {
  8.     srand((int)time(0));
  9.     int doors[3];     
  10.     int mode;
  11.     int choose;
  12.     int result;
  13.     int success = 0;
  14.     for(int i = 0;i < 10000;++i) {//模拟一万次
  15.         mode = random(1,3);//3门问题的排列组合总共有三种情况
  16.         if(mode == 1) {//模式一是前两个门是羊,后一个门是汽车
  17.             doors[0] = 1;
  18.             doors[1] = 1;
  19.             doors[2] = 2;
  20.             choose = random(0,2);//玩家随机选择其中一个门
  21.             if(choose == 0) {//根据规则得到结果
  22.                 result = 2;
  23.             }
  24.             else if(choose == 1) {
  25.                 result = 2;
  26.             }
  27.             else {
  28.                 result = 0;
  29.             }
  30.             if(doors[result] == 2) {//判断门后是否为汽车,如果为汽车,则统计量加1
  31.                 ++success;
  32.             }
  33.         }
  34.         else if(mode == 2) {//模式二为车、羊、羊
  35.             doors[0] = 2;
  36.             doors[1] = 1;
  37.             doors[2] = 1;
  38.             choose = random(0,2);
  39.             if(choose == 0) {
  40.                 result = 1;
  41.             }
  42.             else if(choose == 1) {
  43.                 result = 0;
  44.             }
  45.             else {
  46.                 result = 0;
  47.             }
  48.             if(doors[result] == 2) {
  49.                 ++success;
  50.             }
  51.         }
  52.         else {//模式三为羊、车、羊
  53.             doors[0] = 1;
  54.             doors[1] = 2;
  55.             doors[2] = 1;
  56.             choose = random(0,2);
  57.             if(choose == 0) {
  58.                 result = 1;
  59.             }
  60.             else if(choose == 1) {
  61.                 result = 0;
  62.             }
  63.             else {
  64.                 result = 1;
  65.             }
  66.             if(doors[result] == 2) {
  67.                 ++success;
  68.             }
  69.         }
  70.     }

  71.     cout << success << endl;//输出成功的总数
  72.     return 0;
  73. }
复制代码

三门问题(不换门):
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #define random(a,b) (rand() % (b-a+1))+ a
  5. using namespace std;
  6. void game(int &success);//模拟做出选择后不更改的函数
  7. int doors[3];
  8. int main()
  9. {
  10.     srand((int)time(0));
  11.     int mode;
  12.     int choose;
  13.     int result;
  14.     int success = 0;
  15.     for(int i = 0;i < 10000;++i) {//实验一万次
  16.         mode = random(1,3);//3门问题的排列组合总共有三种情况
  17.         if(mode == 1) {//模式一是前两个门是羊,后一个门是汽车
  18.             doors[0] = 1;
  19.             doors[1] = 1;
  20.             doors[2] = 2;
  21.             game(success);
  22.         }
  23.         else if(mode == 2) {//模式二为车、羊、羊
  24.             doors[0] = 2;
  25.             doors[1] = 1;
  26.             doors[2] = 1;
  27.             game(success);
  28.         }
  29.         else {//模式三为羊、车、羊
  30.             doors[0] = 1;
  31.             doors[1] = 2;
  32.             doors[2] = 1;
  33.             game(success);
  34.         }
  35.     }
  36.     cout << success << endl;//输出成功的总数
  37.     return 0;
  38. }
  39. void game(int &success) {
  40.     int result;
  41.     result = random(0,2);//随机选择一扇门
  42.     if(doors[result] == 2) {//如果选对了,统计量+1
  43.         ++success;
  44.     }
  45. }
复制代码

结果:
换门后成功拿到汽车的频率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
由此可见,三门问题的结论是正确的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2021-2-28 06:10 , Processed in 0.062500 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表