(我们不需要自动完成,所以我可以让玩家选择要使用的骰子,然后检查用户的选择是否有效),但现在我已经开始考虑它了,我不能停止……
问题如下:
在这个例子中,我已经掷出了骰子,它们的值如下:
[2, 2, 2, 1, 1, 1] 这些值应该相加在一起(例如,一个值为1的骰子和另一个值为2的骰子在一起是3),然后在游戏中有不同的回合,目标是获得不同的值(可以是骰值的组合(相加),例如dicevalues: 2,2,2,2,2,2,2,2,2,2可以给用户总共12分,如果4是当前轮的目标)
2 + 2 = 4
2 + 2 = 4
2 + 2 = 4如果这一轮的目标是6,那么它将是
2 + 2 + 2 = 6
2 + 2 + 2 = 6 相反,这会给玩家12分(6 + 6)
[1, 3, 6, 6, 6, 6]2 + 1 = 3
2 + 1 = 3
2 + 1 = 3会给用户9分。但是如果它的计算方法是错误的,而不是每个1都用完了,那么就会得到两个1+1+1的apierd,这只会给玩家3分,这两个不能使用。
[6], [5, 1], [4 ,2] 用户得到18分(3 * 6)
[1 ,2 ,3], [6] user gets 12 points (2 \* 6) (Here the user gets six points less due to adding upp 1 + 2 + 3 instead of doing like in the example above)骰子的值可以在1到6之间。
我真的没有做更多的思考,我非常确定我现在就可以做到,但是如果我想使用8个骰子来代替它,那么它将是一个扩展非常糟糕的解决方案,每次我开始在它上编程时,我开始认为这必须是一个更好/更简单的方法……谁有什么建议从哪里开始呢?
发布于 2017-07-04 23:46:23
对于看起来像这样令人困惑的问题,从一些工作和示例开始是一个非常好的主意。我们有6个骰子,范围从1到6。因此,我们可以进行的可能组合是:
target = 2
1 combination: 2
2 combination: 1+1
target = 3
1 combination: 3
2 combination: 2+1
3 combination: 1+1+1
target = 4
1 combination: 4
2 combination: 3+1
2+2
3 combination: 2+1+1
4 combination: 1+1+1+1
target = 5
1 combination: 5
2 combination: 4+1
3+2
3 combination: 2+2+1
4 combination: 2+1+1+1
5 combination: 1+1+1+1+1看到模式了吗?提示,对于我们可以添加的第一个数字,我们从目标倒退到1,然后给定第一个数字,以及组合的大小,后续数字的大小是有限制的!
可能的组合有一个有限的列表。你可以通过寻找1个组合分数,并从可用的骰子中删除这些组合分数。然后继续寻找2个组合分数,等等。
如果你想了解更多关于数学的子领域,你需要寻找的术语是"Combinatorics“。玩得开心!
https://stackoverflow.com/questions/44885036
复制相似问题