-1

我想将 n 个整数的每个可能的分区迭代成 m 个块。我可以通过使用 m 嵌套的 for 循环来做到这一点,但我确信有更好的方法来做到这一点。

如果我的代码可以将 m 作为变量,那也会很有帮助。

嵌套循环代码如下所示:

对于 a1 <- 1 到 n {
对于 a2 <- a1 到 n {

.
.
对于 am <- a(m-1) to n {
myFunc(Array[1..n], a1, a2, ..., am)
}}...}}

4

2 回答 2

0

最简单的方法是使用递归。但是您在评论中提到您不能使用递归解决方案,所以我可以建议另一种解决方案 - 使用任何方法生成所有 C(n-1, m-1) 组合(我希望,有现成的Java 的非递归组合解决方案)。

例如,对于 n = 7,m = 3,您将有 C(6,2) = 15 个组合 - n 个星,n-1 个空格,其中 m-1 个可能会留下,其他 (mn) 个会塌陷,形成 m集群。

*_*_*_*_*_*_*

组合 010001 对应配置**_****_*,或分区 7 = 2 + 4 + 1

于 2013-09-24T09:50:49.460 回答
0

在学习编写这样的程序时,阅读 Knuth 是无可替代的:

http://www.kcats.org/csci/464/doc/knuth/fascicles/fasc3a.pdf

于 2013-09-26T14:14:40.947 回答