#include <iostream>
#include <vector>
#include <string>
struct Box
{
std::string Ball1;
std::string Ball2;
};
int main()
{
// ΠΠΎΡΠΎΠ±ΠΊΠΈ Ρ ΡΠ°ΡΠ°ΠΌΠΈ
std::vector<Box> boxes;
boxes.push_back({ "gold", "gold" });
boxes.push_back({ "gold", "silver" });
//boxes.push_back({ "silver", "silver" });
// Π’ΡΠ½Π΅ΠΌ ΡΠ°ΡΡ
const int N = 1000000;
int winCount = 0;
int chosen_index;
std::string chosen_ball;
std::string remaining_ball;
for (int i = 0; i < N; i++)
{
rechoseBox:
// ΠΡΠ±ΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ
Box box = boxes[std::rand() % boxes.size()];
if (box.Ball1 != "gold" && box.Ball2 != "gold")
{
// ΠΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ (ΠΊΠΎΠ»Π»Π°ΠΏΡ Π²ΡΠ΅Π»Π΅Π½Π½ΠΎΠΉ) => Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠΎΠ±ΠΊΡ Π΅ΡΡ ΡΠ°Π·
goto rechoseBox;
}
rechoseBall:
// 1) Π’ΡΠ½Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π·ΠΎΠ»ΠΎΡΠΎΠΉ (Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ)
chosen_index = std::rand() % 2;
if (chosen_index == 0)
{
chosen_ball = box.Ball1;
remaining_ball = box.Ball2;
}
else
{
chosen_ball = box.Ball2;
remaining_ball = box.Ball1;
}
if (chosen_ball == "silver")
{
// ΠΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ (ΠΊΠΎΠ»Π»Π°ΠΏΡ Π²ΡΠ΅Π»Π΅Π½Π½ΠΎΠΉ) => Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠΎΠ±ΠΊΡ Π΅ΡΡ ΡΠ°Π·
goto rechoseBall;
}
// 2) Π Π°Π½Π΄ΠΎΠΌΠ½ΠΎ ΡΡΠ½Π΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Ρ ΠΈΠ· ΡΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΡΠΈΠΊ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π·ΠΎΠ»ΠΎΡΡΠΌ
winCount += remaining_ball == "gold";
}
std::cout << "Answer = " << (double)winCount / N << "\n";
}