为了我的学习目的,我需要构建一个数组数组,该数组填充了具有固定项的整数分区。给出一个整数,假设10并且给定固定数量的项,假设我需要填充这样的数组
10 0 0 0 0
9 0 0 0 1
8 0 0 0 2
7 0 0 0 3
............
9 0 0 1 0
8 0 0 1 1
.............
7 0 1 1 0
6 0 1 1 1
............
...........
0 6 1 1 1
.............
0 0 0 0 10
我对Java很新,并且对所有for循环感到困惑。现在我的代码可以对整数进行分区,但不幸的是它没有固定的术语
公共类分区{
private static int [] riga;
private static void printPartition(int [] p,int n){
for (int i= 0; i < n; i++)
System.out.print(p[i]+" ");
System.out.println();
}
private static void partition(int[] p, int n, int m, int i) {
if (n == 0)
printPartition(p, i);
else
for (int k= m; k > 0; k--) {
p[i]= k;
partition(p, n-k, n-k, i+1);
}
}
public static void main(String[] args) {
riga = new int[6];
for(int i = 0; i<riga.length; i++){
riga[i] = 0;
}
partition(riga, 6, 1, 0);
}
}
我得到的输出是这样的:
1 5
1 4 1
1 3 2
1 3 1 1
1 2 3
1 2 2 1
1 2 1 2
1 2 1 1 1
我实际上试图理解如何继续进行的是使用固定的术语,这将是我的数组的列。所以,我坚持试图找到一个方法来实现它 动力不足。有什么帮助吗?
答案 0 :(得分:3)
这样的事情怎么样?
import java.util.*;
public class Main {
static void partition(int sum, int[] arr, int k) {
if (k == arr.length - 1) {
arr[k] = sum;
System.out.println(Arrays.toString(arr));
return;
}
for (int i = sum; i >= 0; i--) {
arr[k] = i;
partition(sum - i, arr, k + 1);
}
}
public static void main(String[] args) {
partition(10, new int[5], 0);
}
}
输出:
[10, 0, 0, 0, 0]
[9, 1, 0, 0, 0]
[9, 0, 1, 0, 0]
[9, 0, 0, 1, 0]
[9, 0, 0, 0, 1]
[8, 2, 0, 0, 0]
[8, 1, 1, 0, 0]
:
:
[0, 0, 0, 5, 5]
[0, 0, 0, 4, 6]
[0, 0, 0, 3, 7]
[0, 0, 0, 2, 8]
[0, 0, 0, 1, 9]
[0, 0, 0, 0, 10]