Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <random>
- #include <algorithm>
- using namespace std;
- int main()
- {
- random_device crypto_random_generator;
- int pick = 0;
- int prize = 0;
- int empty = 0;
- int won_unchanged = 0;
- int won_changed = 0;
- int total_unchanged = 0;
- int total_changed = 0;
- double changed_win_rate = 0;
- double unchanged_win_rate = 0;
- int changed = 0;
- uniform_int_distribution<int> int_distribution(0,2);
- uniform_int_distribution<int> int_distribution_2(0,1);
- vector<int> doors = {0, 0, 0};
- for(int i = 0; i < 1000; i++) {
- doors = {0, 0, 0};
- pick = int_distribution(crypto_random_generator); //первый раз выбираем дверь
- prize = int_distribution(crypto_random_generator); //генерируем приз за указанной дверью
- doors[prize] = 1;
- while(1){
- empty = int_distribution(crypto_random_generator); //открываем дверь случайным образом
- if ((empty != pick) & (empty != prize)) //...но только если она не та же, которую мы выбрали или которая "призовая". иначе ещё раз
- break;
- }
- changed = int_distribution_2(crypto_random_generator); //думаем, менять или нет дверь
- if (changed == 1)
- {
- int pick_2 = 0;
- while(1){
- pick_2 = int_distribution(crypto_random_generator);
- if ((pick_2 != pick) & (pick_2 != empty)) //аналогичное условие: чтобы новая выбранная дверь не была такой же, какой в прошлый раз и чтобы она не была той, которую уже открыли
- break;
- }
- total_changed++;
- if (pick_2 == prize) {
- won_changed++; //если выбор совпал с призом - победа
- }
- }
- else
- {
- total_unchanged++;
- if (pick == prize) {
- won_unchanged++; //если выбор совпал с призом - победа
- }
- }
- }
- changed_win_rate = double(won_changed) / double(total_changed);
- unchanged_win_rate = double(won_unchanged) / double(total_unchanged);
- cout << changed_win_rate << endl;
- cout << unchanged_win_rate << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement