#include <iostream>
#include <vector>
struct Box
{
int goldBalls;
int silverBalls;
};
int main()
{
// ΠΠΎΡΠΎΠ±ΠΊΠΈ Ρ ΡΠ°ΡΠ°ΠΌΠΈ
std::vector<Box> boxes;
boxes.push_back({ 2, 0 });
boxes.push_back({ 1, 1 });
boxes.push_back({ 0, 2 });
// Π’ΡΠ½Π΅ΠΌ ΡΠ°ΡΡ
const int N = 1000000;
int winCount = 0;
for (int i = 0; i < N; i++)
{
rechose:
// ΠΡΠ±ΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ
Box box = boxes[std::rand() % boxes.size()];
// 1) Π’ΡΠ½Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π·ΠΎΠ»ΠΎΡΠΎΠΉ (Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ)
if (box.goldBalls == 0)
{
// ΠΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ (ΠΊΠΎΠ»Π»Π°ΠΏΡ Π²ΡΠ΅Π»Π΅Π½Π½ΠΎΠΉ) => Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠΎΠ±ΠΊΡ Π΅ΡΡ ΡΠ°Π·
goto rechose;
}
box.goldBalls--; // Π²ΡΠ½ΡΠ»ΠΈ Π·ΠΎΠ»ΠΎΡΠΎΠΉ ΡΠ°Ρ
// 2) Π Π°Π½Π΄ΠΎΠΌΠ½ΠΎ ΡΡΠ½Π΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Ρ ΠΈΠ· ΡΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΡΠΈΠΊ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π·ΠΎΠ»ΠΎΡΡΠΌ
winCount += std::rand() % (box.goldBalls + box.silverBalls) < box.goldBalls;
}
std::cout << "Answer = " << (double)winCount / N << "\n";
}