我在编程中解决了一个问题,我有一个矩阵并给出了两个位置,我需要找到它们之间的元素,包括给定的元素
例如,一个1000行和1000列初始位置的矩阵是[499,499],最终位置是[500,500]元素的数量是4
我想知道是否有任何数学公式可以应用于任何矩阵
答案 0 :(得分:1)
根据您使用的编程语言,获取可用于可能的内存分配的元素数量(500-499+1)*(500-499+1)
或(x2-x1+1)*(y2-y1+1)
。然后,要访问矩阵的元素,您可以创建一个使用提供的值计算的大小矩阵并返回该矩阵。
Matrix getSubMatrix(Matrix matrix, int x1, int y1, int x2, int y2) {
// This is assuming matrixes can be created this way
// x2-x1+1 and y2-y1+1 should provide the correct dimensions for the values
// to be extracted from the provided matrix
Matrix submatrix = new Matrix(x2-x1+1, y2-y1+1);
// Now we will itterate through both dimensions of the original matrix
// and the new matrix
for (int i = 0; i < x2-x1+1; i++) {
for (int j = 0; j < y2-y1+1; j++) {
// The new matrix can be accessed with i and j, but the original matrix
// requires the offset of x1 and y1
subMatrix[i][j] = matrix[i+x1][j+y1];
}
}
return submatrix;
}
请注意,您还可以使用数组而不是对象作为输入参数和返回值。正如matt做了他的回答
正如SergGr所指出的那样,x1 > x2
或y1 > y2
可以解决此问题而不是x1 < x2
和y1 < y2
。您可以将方法中的x1
替换为min(x1,x2)
,将x2
替换为max(x1,x2)
,将y1 and y2
替换为var i = 2;
$(".addmore").on('click',function(){
count=$('table tr').length;
var data="<tr><td><input type='checkbox' class='case'/></td><td><span id='snum'>test</span></td></tr>";
$('table').append(data);
i++;
});
。
答案 1 :(得分:0)
当然只需要两个for
循环:
int[][] matrix = new int[1000][1000];
populateMatrix(matrix); // populate the matrix with some values, somehow
int pos_1_X = 499;
int pos_1_Y = 499;
int pos_2_X = 500;
int pos_2_Y = 500;
int numElements = 0;
for(int x = pos_1_X; x <= pos_2_X; x++) {
for(int y = pos_1_Y; y <= pos_2_Y; y++) {
numElements++; // increment the counter
System.out.printf("matrix[%d][%d] = %d", x, y, matrix[x][y]); // print the element
}
}
System.out.println("Number of elements: " + numElements);