【问题标题】:Java array of array [matrix] of an integer partition with fixed term具有固定项的整数分区的数组 [矩阵] 的 Java 数组
【发布时间】:2010-05-07 08:20:20
【问题描述】:

为了我的学习目的,我需要构建一个数组数组,其中填充了具有固定期限的整数的分区。给定一个整数,假设 10 并给定固定数量的项,假设 5 我需要填充这样的数组

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;

私有静态 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

我实际上试图了解如何进行是将它与一个固定的术语,这将是我的数组的列。所以,我一直在努力寻找一种方法来实现它 较少的动态。有什么帮助吗?

【问题讨论】:

    标签: java algorithm arrays matrix multidimensional-array


    【解决方案1】:

    这样的事情呢?

    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)

    【讨论】:

    • 是的,这就是我真正想要的。谢谢多基因润滑剂
    • @santacrose:如果您需要将这些存储到int[][],那么我建议您使用List&lt;int[]&gt; list = new ArrayList&lt;int[]&gt;();,而不是打印出来,list.add(arr.clone());。然后在搜索结束时int[][] all = list.toArray(new int[0][]);
    • 是的,确实如此。我正打算这样做。再次感谢
    • @santacrose:如果答案令人满意,请考虑接受(即点击答案旁边的绿色复选标记)。
    • @polygenelubricants dang,快五年了,它仍然没有被接受。很好的答案。
    猜你喜欢
    • 2021-04-28
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2019-03-17
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多