Advertisement
Guest User

парадокс монти-холла

a guest
Nov 20th, 2021
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3. #include <algorithm>
  4. using namespace std;
  5. int main()
  6. {
  7.    random_device crypto_random_generator;
  8.    int pick = 0;
  9.    int prize = 0;
  10.    int empty = 0;
  11.    int won_unchanged = 0;
  12.    int won_changed = 0;
  13.    int total_unchanged = 0;
  14.    int total_changed = 0;
  15.    double changed_win_rate = 0;
  16.    double unchanged_win_rate = 0;
  17.    int changed = 0;
  18.    uniform_int_distribution<int> int_distribution(0,2);
  19.    uniform_int_distribution<int> int_distribution_2(0,1);
  20.    
  21.    vector<int> doors = {0, 0, 0};
  22.    for(int i = 0; i < 1000; i++) {
  23.        doors = {0, 0, 0};
  24.        pick = int_distribution(crypto_random_generator); //первый раз выбираем дверь
  25.        prize = int_distribution(crypto_random_generator); //генерируем приз за указанной дверью
  26.        doors[prize] = 1;
  27.        while(1){
  28.            empty = int_distribution(crypto_random_generator); //открываем дверь случайным образом
  29.            if ((empty != pick) & (empty != prize)) //...но только если она не та же, которую мы выбрали или которая "призовая". иначе ещё раз
  30.            break;
  31.        }
  32.        changed = int_distribution_2(crypto_random_generator); //думаем, менять или нет дверь
  33.        if (changed == 1)
  34.        {
  35.            int pick_2 = 0;
  36.            while(1){
  37.                 pick_2 = int_distribution(crypto_random_generator);
  38.                 if ((pick_2 != pick) & (pick_2 != empty)) //аналогичное условие: чтобы новая выбранная дверь не была такой же, какой в прошлый раз и чтобы она не была той, которую уже открыли
  39.                 break;
  40.             }
  41.             total_changed++;
  42.             if (pick_2 == prize) {
  43.                 won_changed++; //если выбор совпал с призом - победа
  44.             }
  45.        }
  46.        else
  47.        {
  48.            total_unchanged++;
  49.             if (pick == prize) {
  50.                 won_unchanged++; //если выбор совпал с призом - победа
  51.             }
  52.        }
  53.    }
  54.    changed_win_rate = double(won_changed) / double(total_changed);
  55.    unchanged_win_rate = double(won_unchanged) / double(total_unchanged);
  56.    cout << changed_win_rate << endl;
  57.    cout << unchanged_win_rate << endl;
  58.    return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement