Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <random>
- #include <numeric>
- #include <array>
- std::array<size_t, 3U> values = { 0U, 1U, 2U };
- /**
- * Получаем случайное целое число в диапазоне от 0 до 2
- */
- size_t random() {
- std::random_device random;
- std::default_random_engine engine(random());
- std::uniform_int_distribution<size_t> uniform_dist(0, 2);
- return uniform_dist(engine);
- }
- /**
- * Проводим эксперимент
- * @param change - нужно ли менять дверь после того, как ведущий открыл пустую дверь
- */
- bool experiment(bool change) {
- size_t prizeDoor = random(); // Дверь с призом
- size_t playerDoor = random(); // Игрок выбирает случайную дверь
- // Ведущий открывает пустую дверь, не выбранную игроком
- size_t showmanDoor = *std::find_if(values.begin(), values.end(), [=](size_t index) {
- return index != playerDoor && index != prizeDoor;
- });
- // Меняет ли игрок дверь или нет
- if (change) {
- playerDoor = *std::find_if(values.begin(), values.end(), [=](size_t index) {
- return index != playerDoor && index != showmanDoor;
- });
- }
- return playerDoor == prizeDoor;
- }
- int main() {
- /// Без изменения двери
- size_t wins = 0U;
- for (size_t i = 0U; i < 10000U; i++) {
- wins += experiment(false);
- }
- std::cout << "No change: " << wins << std::endl;
- /// С изменением двери
- wins = 0U;
- for (size_t i = 0U; i < 10000U; i++) {
- wins += experiment(true);
- }
- std::cout << "With change: " << wins << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement