Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <chrono>
- #include <random>
- #include <string>
- int g_changedWin;
- int g_changedLoose;
- int g_notChangedWin;
- int g_notChangedLoose;
- int random(int num) // Рандомим число от 0 до num
- {
- int seed1 = (int) (std::chrono::system_clock::now().time_since_epoch().count());
- std::minstd_rand0 random(seed1);
- int randomResult = random() % num;
- return randomResult;
- }
- void printVector(const std::vector<std::string> &doors) // Вывод текущего вектора
- {
- int doorNumber = 0;
- for (size_t i = 0; i < doors.size(); i++) // Пробегаем по вектору
- {
- doorNumber = i + 1; // Корректируем отображение номера двери
- std::cout << "#" << doorNumber << " door - " << doors[i] << std::endl; // Выводим номер ячейки вектора и её значение
- }
- }
- void printMessage(std::vector<std::string> &doors, int doorIndex, std::string word) // Вывод сообщения определения\выбора\открытия двери с её номером
- {
- if (doorIndex == 0)
- std::cout << word << " First Door" << std::endl;
- if (doorIndex == 1)
- std::cout << word << " Second Door" << std::endl;
- if (doorIndex == 2)
- std::cout << word << " Third Door" << std::endl;
- std::cout << "--------------------" << std::endl;
- }
- int scanDoors(std::vector<std::string> &doors, std::string check) // Возвращение номера ячейки вектора со значением check (Проверяем наши двери)
- {
- for (size_t i = 0; i < doors.size(); i++) // Пробегаем по вектору
- if (doors[i] == check) // Пока не встретим значение равное check
- return i; // Возвращаем номер ячейки со значением check
- }
- void selectDoor(std::vector<std::string> &doors) // Выбор призовой двери
- {
- int selectedDoor = random(3); // Генерируем случайное число от 0 до 2 для определения номеря с призовой дверью
- doors[selectedDoor] = "Win"; // Присваиваем призовой двери победное значение
- }
- void chooseDoor(std::vector<std::string> &doors) // Выбор двери игрока
- {
- int chosenDoor = random(3); // Генерируем случайное число от 0 до 2 для определения номер выбраной двери
- doors[chosenDoor] = "Chosen"; // Присваиваем призовой двери значение - Выбрана
- }
- void openDoor(std::vector<std::string> &doors) // Открытие пустой двери (Не игрока и не призовой)
- {
- int emptyDoor = scanDoors(doors, "Empty"); // Находим пустую дверь и возвращаем её номер
- doors[emptyDoor] = "Opened"; // Присваиваем открытой двери значение - Открыта
- }
- void resulting(std::vector<std::string> &doors)
- {
- int choise = random(2); // Генерируем 0 или 1 для определения выбора.
- if (choise == 0) // Если 0, то дверь не меняем.
- {
- for (size_t i = 0; i < doors.size(); i++) // Проверяем двери
- if (doors[i] == "Empty") // Если найдена пустая дверь, то игрок изначально выбрал победную дверь. Не изменил решение. Победа.
- {
- g_notChangedWin++; // Ведем подсчет побед когда дверь не поменяли.
- break;
- }
- else if (doors[i] == "Win") // Если найдена победная дверь, то игрок изначально выбрал пустую дверь. Не изменил решение. Проигрыш.
- {
- g_notChangedLoose++; // Ведем подсчет поражений когда дверь не поменяли.
- break;
- }
- }
- else // Если не 0 то дверь меняем
- {
- for (size_t i = 0; i < doors.size(); i++) // Проверяем двери
- if (doors[i] == "Empty") // Если найдена пустая дверь, то игрок изначально выбрал победную дверь. Изменил решение. Поражение.
- {
- g_changedLoose++; // Ведем подсчет поражений когда дверь поменяли.
- break;
- }
- else if (doors[i] == "Win") // Если найдена победная дверь, то игрок изначально выбрал пустую дверь. Изменил решение. Победа.
- {
- g_changedWin++; // Ведем подсчет побед когда дверь поменяли.
- break;
- }
- }
- }
- void filling(std::vector<std::string> &doors)
- {
- for (int i = 0; i < 3; ++i)
- doors.push_back("Empty");
- }
- int main()
- {
- int attempts; // Заводим переменную попыток
- std::cin >> attempts; // Запрашиваем количество попыток
- std::vector<std::string> doors; // Создаем вектор с дверями
- for (int x = 0; x < attempts; ++x)
- {
- filling(doors);
- selectDoor(doors); // Выбор победной двери
- chooseDoor(doors); // Выбор двери игрока
- openDoor(doors); // Открытие двери не игрока и не победной
- resulting(doors); // Расчет и подсчет результата
- doors.clear();
- }
- std::cout << "NotChangedWin = " << g_notChangedWin << std::endl << std::endl; // Вывод Количества побед когда дверь не была изменена.
- std::cout << "ChangedWin = " << g_changedWin << std::endl << std::endl; // Вывод Количества побед когда дверь была изменена.
- std::cout << "NotChangedLoose = " << g_notChangedLoose << std::endl << std::endl; // Вывод Количества побед.
- std::cout << "ChangedLoose = " << g_changedLoose << std::endl << std::endl; // Вывод Количества поражений.
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement