【发布时间】:2015-12-15 20:50:18
【问题描述】:
对于一个部落战争游戏,我想知道如何解决以下问题:从 0 级开始有 3 座建筑物。您可以升级建筑物,将其级别从 0 级增加到 1 级,最多 30 级。
由于您可以独立于其他建筑物的等级升级您的建筑物,因此建筑物等级的组合有 30*30*30...
这些组合的输出将是:
0/0/0
0/0/1
0/0/2
...
0/0/30
0/1/0
[0,1,1]
...
0/1/30
0/2/0
0/2/1
...
0/2/30
...
0/30/0
...
0/30/30]
1/0/0
以此类推,直到 30/30/30...
此输出的代码将是一个简单的循环中循环!
但是:这不是我们想要的!
我想要的是获得这些组合的方法,例如组合 [1,1,1] 有 6 (= !3) 种可能的方式来达到这种组合(“a” = 升级第一栋建筑,“b” = 升级第二栋建筑,“c” = 升级第三栋建筑):
a -> b -> c
a -> c -> b
b -> a -> c
b -> c -> a
c -> a -> b
c -> b -> a
请注意,这 6 种方式都会导致相同的结果——所有建筑物都升级了一次。现在,要让所有建筑都达到 30 级,我必须将每个建筑升级 30 次,这意味着最终我们进行了 30*3 的升级。
到达那里的方法例如是:
a -> a -> a -> ... -> a -> b -> b -> ... -> b -> c -> ... -> c
我认为我需要的是一个包含 90 个元素的数组,包含 3 个元素(每个 30 次),然后我需要这 90 个元素的所有可能顺序...
我该怎么做?
提前致谢!
M. M.
【问题讨论】:
-
这还不清楚。你能发布一个想要的输出样本吗?你也尝试过吗?
-
从写一些代码开始,遇到困难,记录下来,尝试通过在线查找来解决。如果您在这一切之后失败了,请编写一个 MCV 示例并在此处发布。欢迎
-
这听起来就像一个排列/组合问题。你还没有展示任何你已经尝试过的东西
-
怎么会只有90次升级?不应该是30*30*30吗?
标签: java permutation