gpt4 book ai didi

java - 组合二维数组

转载 作者:行者123 更新时间:2023-12-01 11:52:02 24 4
gpt4 key购买 nike

我需要弄清楚如何转动 3x3 数组

{{7,2,3},
{0,4,8},
{5,6,1}}

转换为 9x9 数组,其中每个 3x3 部分是原始数组 o,但每个值 nn+(9*c) 其中c 是相应的部分。换句话说,由于原始数组的左上角部分是 7,因此第 0、0(左上角)部分的每个值都应更改为 originalValue+(9*7)。 -right,但公式为 originalValue+(9*1),因为原始数组的右下部分为 1。新数组应如下所示(仅包含提到的两个部分)

{{70,65,66,0,0,0,0,0,0},
{63,67,70,0,0,0,0,0,0},
{68,69,64,0,0,0,0,0,0},
{00,00,00,0,0,0,0,0,0},//leading zeros added for easy legibility
{00,00,00,0,0,0,0,0,0},
{00,00,00,0,0,0,0,0,0},
{0,0,0,0,0,0,16,11,12},
{0,0,0,0,0,0,09,13,17},
{0,0,0,0,0,0,14,15,10}}

现在这是最困难的部分:然后我需要重复这个过程,但是使用这个 9x9 数组作为原始数组来获取 27x27 数组,然后重复多次以每次获取更大的数组(81x81 然后243x243 等)。

我已经能够获取方法addAllValues(),但我无法继续下去。

public static int[][] addAllValues(int[][] data, int value2){
int value = value2 * 9;
int[][] temp = data.clone();
int[][] newData = temp.clone();
for (int i = 0; i < temp.length; i++) {
for (int j = 0; j < temp[0].length; j++) {
newData[i][j] = temp[i][j] + value;
}
}
return newData;
}

有人可以帮我解决这个问题吗?提前致谢!

这是我尝试过的:

public static int[][] gen(int amount) {
if (amount == 0) {
return normal;
} else {
int[][] newArray = gen(amount-1);
int[][] temp = new int[newArray.length*3][newArray.length*3];
int[][][][] newArrays = {{addAllValues(newArray,7),addAllValues(newArray,2),addAllValues(newArray,3)},{addAllValues(newArray,0),addAllValues(newArray,4),addAllValues(newArray,8)},{addAllValues(newArray,5),addAllValues(newArray,6),addAllValues(newArray,1)}};
for (int i = 0; i < temp.length; i++) {
for (int j = 0; j < temp.length; j++) {
int x=0,y=0;
if (0 <= i && i < 3){
x = 0;
} else if (3 <= i && i < 6){
x = 1;
} else if (6 <= i && i < 9){
x = 2;
}
if (0 <= j && j < 3){
y = 0;
} else if (3 <= j && j < 6){
y = 1;
} else if (6 <= j && j < 9){
y = 2;
}
temp[i]
[j] = newArrays[x]
[y]
[i]
[j];
}
}
return temp;
}
}

最佳答案

好吧,这是非常基本的。

你有一个方阵A。

    [a b c]
A = [e f g]
[h i j]

将矩阵向右(水平)复制 3 次以获得[A A A],然后将 strip 复制到底部(垂直)3 次以获得矩阵的方形条

    [A A A]
B = [A A A]
[A A A]

新矩阵的每个维度增大了 3 倍,或者总共增大了 9 倍(每个“区域”)。现在您需要做的是修改每个子矩阵——添加原始矩阵中的相应元素。您需要找到子矩阵的索引(子部分的索引),并在原始矩阵中使用相同的索引来获取相应的标量。

[9*A(0,0)+A 9*A(0,1)+A 9*A(0,2)+A]
[9*A(1,0)+A 9*A(1,1)+A 9*A(1,2)+A]
[9*A(1,0)+A 9*A(1,1)+A 9*A(1,2)+A]

我们需要设置的最后一个环节是知道新矩阵B中的哪个元素对应于哪个部分。B 是原来的 3 倍,例如B[0..8, 0..8] 因此,如果我们将 B 中元素的索引除以 3(整数除法),我们就得到它的部分,这就是 A 中标量的索引。

我们说元素 B(r,c) 位于 (i,j)=(r/3, c/3) 部分,因此该元素应使用A(i,j)进行修改。最后一句话几乎概括了这一点。

关于java - 组合二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com