具有固定项的整数分区的数组[矩阵]的Java数组

时间:2010-05-07 08:20:21

标签: java algorithm arrays matrix multidimensional-array

为了我的学习目的,我需要构建一个数组数组,该数组填充了具有固定项的整数分区。给出一个整数,假设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

我实际上试图理解如何继续进行的是使用固定的术语,这将是我的数组的列。所以,我坚持试图找到一个方法来实现它 动力不足。有什么帮助吗?

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]

see full output