Вопрос по теории вероятностей (от чайника)
Дано: имеется множество из 10 карт. 4 из этих карт находятся на руках противника. Среди этих 10 карт имеются 3 "опасные". Задание: как посчитать вероятность того, что ХОТЯ БЫ ОДНА (любая) из "опасных" карт окажется среди этих 4 карт на руках у противника?
Спасибо!
Ответы (2 шт):
Посчитаем количество вариантов для выбора карт которые окажутся у противника - это количество сочетаний из 10 по 4 = 210.Из них условию задачи удовлетворяют те наборы из четверок в которых есть хотя бы одна опасная карта. Посчитаем сколько таких наборов. Наборов в которых встретились все три опасные карты будет 7 штук : зафиксировали 3 опасных и остаётся подобрать одну карту в набор,всего вариантов 7. Наборов в которых встретились две опасные карты - 63: тут фиксируются 2 опасные карты, а вариантов для остальных - количество сочетаний из 7 по 2, умножаем это количество на 3 поскольку вариантов для фиксации первых двух карт - 3, а наборов с одной опасной картой 105: фиксируем одну опасную карту,а подбираем остальные,вариантов для остальных - количество сочетаний из 7 по 3 = 35 и умножаем на 3 - количество вариантов для фиксации первой карты и того 105 . Тогда нам подходят 7+63+105=175 наборов.Тогда по классической вероятности - это кол-во вариантов которые удовлетворяют условию делить на общее кол-во вариантов. То есть 175/210=0.833 или 83%.
Можно и проще. Каково отрицание "хотя бы одна опасная карта"? Ни одной. Значит, вероятность выбрать хотя бы одну опасную карту = 1 - вероятность не выбрать ни одной опасной карты.
Всего способов выбрать 4 карты из 10:
(Запись в скобках - американская...) А способов не выбрать ни одной опасной, только безопасные карты - это выбрать 4 из 7 безопасных карт:
Значит, выбрать 4 карты так, чтобы среди них была хотя бы одна опасная = 210-35=175. А вероятность, соответственно, 175/210, как и у CuriousBoy.
Просто считаем в одно действие :):
P.S. Кто не верит в эту вероятность - вот исчерпывающий эксперимент:
int main(int argc, const char * argv[])
{
int total = 0, bad = 0;
string s = "0123456789";
do {
if (s[0] < '3' || s[1] < '3' || s[2] < '3' || s[3] < '3') bad++;
total++;
} while(next_permutation(s.begin(),s.end()));
cout << double(bad)/total << endl;
}


