具有 5 个元素的数组的算法,当填充时将元素分组

Algorithm for Array with 5 elements that when filled groups the elements

我正在尝试找出一种方法,通过将 n 个元素一个一个地相加来填充一个 int 数组。当阵列的每个点都被填满时,我希望它们在第一个可能的位置分组并重新开始。

例如:

[0, 0, 0, 0, 0]

数组看起来是空的。

如果我想添加 2 个元素,它应该如下所示:

[1, 1, 0, 0, 0]

5 个元素看起来像这样:

[1, 1, 1, 1, 1]

到目前为止,还不错。现在,在添加第六个元素时,我希望发生这种情况:

[2, 0, 0, 0, 0]

然后像以前一样填充下一个元素,除了包含该组的第一个位置:

[2, 1, 0, 0, 0]

[2, 1, 1, 0, 0]

[2, 1, 1, 1, 0]

[2, 1, 1, 1, 1]

然后下一步应该是:

[2, 2, 0, 0, 0] 等

我希望我清楚自己在寻找什么。有这方面的算法吗?我搜索了一下,一无所获。有人可以为此创建算法吗?

我的作业在星期天到期,如果你能帮我找到解决问题的办法,我将不胜感激。

第一步是寻找最小元素,如果重复我们取第一个。然后我们将它递增,最小元素之后的所有元素都变为 0.

public static void main(String[] args) {
    int[] arr = new int[]{0, 0, 0, 0, 0};
    for (int i = 0; i < 15; i++) {
        next(arr);
        System.out.println(Arrays.toString(arr));
    }
}

static void next(int[] arr) {
    int idx = 0; //index of min element
    for (int i = 0; i < arr.length; i++) {
        if (arr[idx] > arr[i]) {
            idx = i;
        }
    }
    Arrays.fill(arr, idx + 1, arr.length, 0);
    arr[idx]++;
}

添加15个元素后:

[1, 0, 0, 0, 0]
[1, 1, 0, 0, 0]
[1, 1, 1, 0, 0]
[1, 1, 1, 1, 0]
[1, 1, 1, 1, 1]
[2, 0, 0, 0, 0]
[2, 1, 0, 0, 0]
[2, 1, 1, 0, 0]
[2, 1, 1, 1, 0]
[2, 1, 1, 1, 1]
[2, 2, 0, 0, 0]
[2, 2, 1, 0, 0]
[2, 2, 1, 1, 0]
[2, 2, 1, 1, 1]
[2, 2, 2, 0, 0]