【发布时间】:2017-04-09 22:19:06
【问题描述】:
对于 n
class Test {
public static void main(String args[]) {
printAll(4);
}
public static void printAll(int k) {
int count = 0;
int a[] = new int[k];
for (int i = 0; i < k; i++) {
a[i] = 1;
}
int currentSum = 0;
a[1] = 0;
for (int i = 0; i < k; i++) {
a[1]++;
for (int j = 0; j < k - i; j++) {
currentSum += a[i];
count++;
if (currentSum == k) {
for (int m = 0; m < count; m++) {
System.out.print(a[m] + " ");
}
System.out.println();
}
}
count = 0;
}
}
}
对于 n = 4:
期望的输出:
1 1 1 1
1 2 1
1 3
我得到的输出:
1 1 1 1
这实际上是代码的第一步。稍后我需要打印
2 1 1
2 2
所以基本上我的目标是在迭代的每个步骤中使总和等于 4(在这种情况下)
【问题讨论】:
-
对于您想要的输出,是否需要按特定顺序排列?就像在第一个例子中一样:
2 1 1可以代替1 2 1吗? -
是的,它应该与问题中给出的顺序相同。
-
定义“整数序列”。它是某个给定序列的子序列吗?它是小于给定数字的任何整数集吗?
-
这些序列之一的数学短语是“分区”。所以你想列出
n的所有分区。