Для розв'язання задачі скористаємося формулою повної ймовірності. Позначимо:
— кількість дверей з коровами;
— кількість дверей з автомобілями;
doors = cows + cars — загальна кількість дверей;
— кількість дверей з коровами, які відкриває ведучий.
Спочатку ймовірність вибрати двері з коровою дорівнює cows / doors, а ймовірність вибрати двері з автомобілем дорівнює cars / doors.
Після того як гравець зробив первинний вибір, ведучий відкриває дверей з коровами. Потім гравець змінює свій вибір і обирає одні з дверей, що залишилися закритими.
Після відкриття дверей і виключення первинно обраних дверей залишається doors - shown - 1 закритих дверей. Розглянемо два випадки.
1. Спочатку гравець обрав корову.
Ймовірність цієї події дорівнює cows / doors.
Оскільки всі відкриті ведучим двері містять корів, серед дверей, що залишилися закритими, знаходяться всі автомобілів. Тому ймовірність обрати автомобіль після зміни вибору дорівнює
Отже, внесок цього випадку в підсумкову ймовірність дорівнює добутку ймовірності первинно обрати корову та ймовірності потім обрати автомобіль.
2. Спочатку гравець обрав автомобіль.
Ймовірність цієї події дорівнює cars / doors.
Після відкриття дверей з коровами серед дверей, що залишилися закритими, знаходиться cars - 1 автомобілів, оскільки один автомобіль вже знаходиться за первинно обраними дверима. Тому ймовірність обрати автомобіль після зміни вибору дорівнює
Отже, внесок цього випадку в підсумкову ймовірність дорівнює добутку ймовірності первинно обрати автомобіль та ймовірності знову обрати автомобіль після зміни вибору.
Таким чином, результуюча ймовірність виграшу автомобіля обчислюється як сума ймовірностей виграшу в цих двох випадках:
Приклад
Розглянемо перший тестовий приклад. У грі є троє дверей.
Якщо спочатку гравець обирає двері з призом, то ймовірність такого вибору становить . Після зміни вибору він обов'язково програє, оскільки двері, що залишилися закритими, ведуть до корови.
Якщо ж спочатку гравець обирає двері з коровою, то ймовірність такого вибору становить . Ведучий відкриває інші двері з коровою, і після зміни вибору гравець обов'язково обирає двері з призом і виграє.
Таким чином, підсумкова ймовірність виграшу дорівнює
Реалізація алгоритму
Читаємо вхідні дані.
while(scanf("%d %d %d",&cows,&cars,&shown) == 3)
{Обчислюємо кількість дверей .
doors = cows + cars;Обчислюємо відповідь за формулою та виводимо її.
res = 1.0*((cars - 1)*cars + cars*cows)/(doors*(doors – shown - 1));
printf("%.5lf\n",res);
}