获得在dicegame中获得最高分的facevalues组合

时间:2017-07-03 11:59:51

标签: algorithm

在学校的Dicegame上工作,我无法弄清楚如何自动计算结果。 (我们不必自动完成,所以我可以让玩家选择使用哪个骰子,然后检查用户选择是否有效)但现在我已经开始考虑它了,我无法停止。 ..

问题如下:
我有六个骰子,骰子是普通骰子,值为1-6 在这个例子中,我已经骰子,他们有以下值:

[2, 2, 2, 1, 1, 1]  

但我不知道如何计算所有组合,以便使用尽可能多的组合(加法)为3(在本例中)的组合。

值应该加在一起(例如,值为1的骰子和值为2的另一个骰子在一起3)然后在游戏中有不同的回合,其目的是获得不同的值(可以是组合(附加)例如模具值 骰子值:[2,2,2,2,2,2] 如果4是本轮的目标,则可以给用户总共12分。

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]
目标为3的

只会使用值为3的骰子并丢弃其余的骰子,因为没有办法将它们加起来得到三个。

2 + 1 = 3
2 + 1 = 3
2 + 1 = 3

会给用户9分。 但是如果它计算错误的方式和那些用在一起的那些而不是每个1得到一个两个1 + 1 + 1,这只会给玩家3分,那么这两个就不能用了。

另一个例子是:     [1,2,3,4,5,6] 并且所有等于6的组合都给出了用户点

[6], [5, 1], [4 ,2]  

用户获得18分(3 * 6)
    [1,2,3],[6] 用户得到12分(2 * 6)(这里用户得到的积分减少了6分,因为在上面的例子中添加了upp 1 + 2 + 3而不是这样做)

骰子的值可以是1到6之间。

我还没有做过多考虑,而且我很确定我现在可以做到这一点,但是如果我想要使用8个骰子代替那么这将是一个非常糟糕的解决方案每当我开始编程时,我开始认为必须是一个更好/更简单的方法...任何人都有任何关于从哪里开始的建议?我试着寻找一个答案,我确定它已经存在,但是我有一个问题,它可以为我提供相关结果的查询......

1 个答案:

答案 0 :(得分:0)

如果这些问题看起来令人困惑,那么从一些工作和示例开始是一个非常好的主意。我们有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个组合分数,并从可用的模具中删除它们。然后继续寻找2个组合分数等。

如果你想了解更多关于这个数学子领域的内容,你需要寻找的术语是" Combinatorics"。玩得开心!