import numpy as np
""" На первом этапе создается массив вероятностей выпадения орла
для 100 индивидуальных монет - orels.
"""
orels = []
for i in range (1,101, 1):
probability = 1/(2*i + 1)
orels.append(probability)
orels = np.asarray(orels)
""" Также генерируется массив вероятностей выпадения решек - reshkas.
"""
reshkas = 1 - orels
print(reshkas)
""" Самое вкусное!
Все решение основано на том, что наиболее вероятным НЕЧЕТНЫМ случаем
будет выборка с выпадением орла у первой монеты (шанс - 0.(3)) на 99 оставшихся решек.
Следующий нечетный случай - 3 первых орла на 97 решек, затем 5 первых орлов на 95 решек и т.д.
Почему я выбрал именно такую последовательность выпадения орлов, а не другую?
Да потому, что она наиболее вероятная)) - вероятность выпадения орлов с увеличением i,
можно сказать, стремиться к нулю.
В конечном итоге нужно получит 50 выборок следующего вида:
Odd_case1 = [О P P P P P...P[100]]
Odd_case2 = [О O O P P P...P[100]]
Odd_case3 = [О O O O O P...P[100]]
...
Odd_case50 = [О O ...О[99] Р[100]]
, где О - орел, Р - решка.
Чтобы получить такие выборки я итерирую массив решек 'reshkas' с поиндексной
заменой i-ой решки на i-го орла из массива 'orels' c шагом 2.
В каждом цикле для каждой такой выборки мы считаем общую вероятность
выпадения именно такой комбинации перемножив вероятности всех выпавших монет в выборке.
Полученные значения заносятся в новый массив 'oryol_probability', что является
массивом вероятностей выпадения i-го числа орлов, где i = 1, 3, 5 ... , 99.
"""
oryol_probability = []
for i in range (1, 100, 2):
if reshkas[i] > 0:
reshkas[:i] = orels[:i]
# print(reshkas) - Unmute, если хотите отследить процесс замены.
multyplied_coins = np.prod(reshkas)
oryol_probability = np.append(oryol_probability, [multyplied_coins], axis = 0)
print('Массив вероятностей выпадения i-го числа орлов:', oryol_probability)
""" Ответ есть сумма полученных 50 общих вероятностей выборок, в которых наиболее вероятно выпало нечетное количество орлов.
"""
odd_orels_probability = np.sum(oryol_probability)
print('Ответ: ', '%.4f' % odd_orels_probability)