PEHDOM
Соотвевенно если у нас n-многоугольник, то чтобы фишка обошла все вершины нужно чтобы “орел” выпал на n-1 раз больше или меньше чем “решка”(не обязательно подряд, просто больше или меньше). Тогда и только тогда фишка обойдет все вершины.
Все верно, но это простой, очевидный и не интересный вариант. Интересно, когда число выпадений равно. И даже тогда, фишка обходит все вершины. Уже писал, для того чтобы, фишка не отклонялась должен быть постоянный баланс ходов, а вероятность этого минимальная. В зависимости от числа ходов и числа вершин вообще может быть нулевой.
PEHDOM
А она, допустим в трехугольнике, может сделать один ход влево и два вправо, или два хода влево, или два вправо и все вершины будуд обойдены. а разница между количеством орлов и решек равна 1 или 2, тоесть такой подход не подходит
А вот тут самое то!
Переделал код, чтобы выводились строки там, где число ходов влево и вправо равно.
Если посмотрите, что выводит код ниже, то видно, что когда число выпадений равно (diff = x0-x1 == 0), отклонение фишки (колонка shift) составляет приличное значение. И это всего при 100 шагов!!!
# from random import randint def choices(attempt, steps=100): lst = [] max_left = 0 max_right = 0 center = 0 for _ in range(steps): x = randint(0, 1) lst.append(x) if x == 1: center += 1 else: center -= 1 if center > max_right: max_right = center if center < max_left: max_left = center x1 = sum(lst) x0 = len(lst)-x1 diff = x0-x1 # max_shift - показывает max отклонение фишки от своего угла. max_shift = abs(max_left) if abs(max_left) > max_right else max_right return attempt, x0, x1, diff, max_left, max_right, max_shift attempts = 100 fmt = '{:<5} | {:>5} | {:>5} | {:>5} | {:>5} | {:>5} | {:>5}' print(fmt.format(*'# x0 x1 x0-x1 left right shift'.split())) i, n = 0, 0 while n < attempts: i += 1 t = choices(i) diff = t[3] if diff == 0: n += 1 print(fmt.format(*t))
