Я тоже не вижу другого способа решить, кроме как перебором вариантов. Также мне кажется, что и его вручную не осилить, нужен машинный перебор. Но и в этом случае потребуется приложить определенные усилия к тому, чтобы он имел разумный объем.
Перебирать нужно комбинации цветов, а затем для каждой комбинации считать вероятность ее получения. Но число всех комбинаций равно
. Это довольно много.
Можно заметить, что изначально для нас все цвета равноправны. Поэтому после извлечения первой пары разноцветных шаров можно пронумеровать цвета так, чтобы первый шар имел цвет 1, а второй - цвет 2. Тогда число вариантов для перебора будет уже
. Это программа уже должна достаточно легко потянуть.
Еще можно заметить, что при перестановке местами шаров внутри каждой пары вероятность комбинации не меняется. Поэтому можно ограничиться только такими парами, в которых номера цветов следуют в порядке возрастания. Тогда для каждой пары остается только 21 возможных значений, т.е. число комбинаций для перебора будет составлять
. Стало еще легче.
В принципе можно воспользоваться тем, что после извлечения первой пары (и присвоения двум цветам номеров 1 и 2) остальные цвета по-прежнему равноправны. Например, если следующие два цвета отличаются от первых двух, то им можно присвоить индексы 3 и 4. Но поскольку тут уже могут быть извлечены и шары первых двух цветов, то придется все равно вручную рассмотреть несколько вариантов. Не уверен, что это стоит делать, так как и без этого машинный перебор справится, а так больше шансов ошибиться.
Понятно, что теперь возникают уже сложности совсем другого сорта, связанные с округлениями и возможной потерей точности при суммировании большого числа малых слагаемых. Теоретически можно организовать точные вычисления в рациональных дробях, но тогда возможно придется использовать арифметику работы с длинными числами, так как стандартной длины может и не хватить.