Java-массив массива [матрицы] целочисленного разбиения с фиксированным членом - PullRequest
1 голос
/ 07 мая 2010

для моей учебной цели мне нужно построить массив массивов, заполненных разделами целого числа с фиксированным членом. Для этого задано целое число, предположим, что 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. Прямо сейчас мой код может сделать разделение целого числа, но, к сожалению, это не с фиксированным термином

публичный класс Partition {

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 Ответ

3 голосов
/ 07 мая 2010

Как насчет этого?

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]

( см. Полный вывод )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...