Формула для нахождения количества комбинаций, исходя из количества кубиков и выпавшего результата
нужна помощь в написании функции diceRoll(int dices, int result) , которая получает два аргумента, первый - количество кубиков, второй - результат который выпал. Собственно, проблема состоит в составлении формулы подсчета комбинаций выпадения x результата при n - количестве кубиков, где, например (1+5) и (5+1) - разные комбинации. Например, при diceRoll(2, 5) -> 4 //(1 + 4)(4 + 1)(2 + 3)(3 + 2) Или, может быть можно как-нибудь решить без формулы? Пока не получается сообразить полный перебор :(
Ответы (1 шт):
Если вам действительно нужно только количество подходящих комбинаций, то перебор, конечно, ни к чему.
Если поставить точки в количестве result, то между ними будет result-1 мест, куда можно поставить dices-1 разделителей, чтобы получить dices непустых частей.
o o o o o o
^ ^ ^ ^ ^
| | | | |
Таким образом, формула получается для числа сочетаний из n по k
С(result-1,dices-1) = (result-1)! / ((result-dices)! * (dices-1)!)
Например, для 6,3 это C(5,2)=10. Проверяем:
1 1 4
1 2 3
1 3 2
1 4 1
2 1 3
2 2 2
2 3 1
3 1 2
3 2 1
4 1 1