我正在解决涉及矩阵的算法任务。 我需要计算一个较大的内部正方形(较小的矩阵)。 原始长度和下一个长度之间是否有任何依赖关系? 作为一个例子,我有这个矩阵:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
您可能会看到Rows = 6
,Cols = 6
,Length = Rows * Cols;
问题陈述:如何计算内矩阵的长度:
8 9 10 11
14 15 16 17
20 21 22 23
26 27 28 29
最后一个
15 16
21 22
我能做什么:
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
//mirrored row and col e.g. 0 1 2 3 2 1 0
int rowMir = i >= (int)Math.round(M/2.0d) ? (M - 1 - i) : i;
int colMir = j >= (int)Math.round(N/2.0d) ? (N - 1 - j) : j;
int depth = row > col ? col : row; //depth of inner square for each element in iteration. square's border in other words.
//In current matrix there are 3 inner squares (0, 1, 2)
}
}
它有用吗?我试图根据我所获得的价值来计算它,但直到现在都没有成功。在这种情况下,谷歌搜索没有给我任何东西。
修改
我正在寻找的解决方案是动态获取每个元素的矩阵大小。 [i][j]
处的值示例我计算了它所属的内部矩阵depth
。
答案 0 :(得分:2)
您可以在每次迭代时简单地减少2
步:
int minDim = Math.min(rows, columns);
for(int i = minDim ; i >= 0 ; i -= 2) {
System.out.println("Inner length: " + ((rows - i) * (columns - i)))
}
答案 1 :(得分:0)
如果您确实要打印所有内部矩阵并获得计数,那么您可以执行以下操作:
public static void main (String[] args)
{
/* Define Matrix */
int matrixSize = 6;
int[][] matrix = new int[][]{{1, 2, 3, 4, 5, 6 },
{7, 8, 9, 10,11,12},
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30},
{31,32,33,34,35,36}};
/* Initialize Count Counter */
int count = 0;
/* Count/Print Inner Matrices */
for(int x = 2; x < matrixSize; x++) {
for(int i = 0; i <= matrixSize - x; i++) {
for(int j = 0; j <= matrixSize - x; j++) {
/* Call Print Matrix Function */
printMatrix(matrix, i, j, x);
++count; /* Increment Counter */
}
}
}
/* Print Actual Count */
System.out.println("\nTotal Inner Square Matrices Count: " + count);
}
/**
* Print Matrix
* Arguments: Matrix, Row Index, Column Index, Matrix Size
**/
public static void printMatrix(int[][] matrix, int i, int j, int size) {
System.out.println();
/* Row Iterator */
for(int iIndex = i; iIndex < i + size; iIndex++) {
System.out.println();
/* Column Iterator */
for(int jIndex = j; jIndex < j + size; jIndex++) {
System.out.print(" " + matrix[iIndex][jIndex]);
}
}
}
<强>输出:强>
1 2
7 8
2 3
8 9
...
Total Inner Matrices: 54