我需要弄清楚如何转动3x3阵列
{{7,2,3},
{0,4,8},
{5,6,1}}
到9x9数组中,其中每个3x3部分是原始数组o
,但每个值n
都是n+(9*c)
,其中c
是相应的部分。换句话说,第0,0部分(左上角)应该将其每个值更改为originalValue+(9*7)
,因为原始数组的左上部分是7.与右下角类似,但公式将是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;
}
}
答案 0 :(得分:1)
好的,这是非常基本的。
你有一个方阵A。
[a b c]
A = [e f g]
[h i j]
将矩阵向右(水平)复制3次以获得[A A A]
,然后将条带复制3次到底部(垂直)以获得方形矩阵条
[A A A]
B = [A A A]
[A A A]
新矩阵每个维度大3倍,或者总共大9倍(每个&#34;区域&#34;)。现在您需要做的是修改每个子矩阵 - 添加原始矩阵中的相应元素。您需要找到子矩阵的索引(子部分的索引),并在原始矩阵中使用这些相同的索引来获得相应的标量。
[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)
进行修改。最后一句话几乎总结了它。