我必须将二次矩阵中主对角线上方和下方形成的每个三角形相加,然后从下面的一个中减去上面的一个,例如,如果我有一个像这样的矩阵:
我想计算:
第一个三角形:4 - 4 = 0
第二个三角形:(4 + 4 + 5) - (4 + 3 + 1)= 6
第三个三角形:(4 + 4 + 5 + 1 + 3 + 3) - (4 + 3 + 1 + 2 + 2 + 5)= 4
到目前为止,我想出了这个,它将计算对角线下方和上方三角形的所有元素。
我不知道如何为每个形成的三角形做到这一点,这是我的问题
public static void main(String...args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter rows/cols : "); //rows and
columns in matrix must be same.
int rows = scanner.nextInt();
int columns=rows;
int[][] matrix = new int[rows][rows];
System.out.println("Elements of matrix :");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
matrix[i][j] = scanner.nextInt();
}
}
//Logic to calculate sum of elements above diagonal.
int sum=0;
for (int j = 1; j < columns; j++) {
for (int i=j-1 ; i>=0 ; i--) {
sum= sum + matrix[i][j];
}
}
int sumBelow=0;
for (int i = 1; i < rows; i++) {
for (int j=i-1 ; j>=0 ; j--) {
sumBelow= sumBelow+ matrix[i][j];
}
}
System.out.println("\Matrix is : ");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
System.out.println("sum above: "+sum);
System.out.println("suma below: " + sumBelow );
int subtract;
if(sum > sumBelow) {
razlika = sum - sumBelow;
System.out.println("Subtracted: " + subtract);
}else {
subtract= sumBelow- sum;
System.out.println("Subtracted: " + subtract);
}
}
我得到的是......
请注意,除了普通数组,没有预定义的方法,包装或任何东西,我不能使用任何东西。
答案 0 :(得分:2)
在由(row,col)对索引的矩阵中,考虑col-row
差异的值:
0 1 2 3 4
-------------
0 | 0 1 2 3 4
1 | -1 0 1 2 3
2 | -2 -1 0 1 2
3 | -3 -2 -1 0 1
4 | -4 -3 -2 -1 0
注意主对角线以上(col-row)
的值是如何高于某个正数,低于主对角线以下的单元的低于某个负数。
您可以使用索引的此属性来添加相应对角线下方或上方的值:
int addUp(int[][] matrix, int N, int diag) {
int sum = 0;
for (int row = 0 ; row != N ; row++) {
for (int col = 0 ; col != N ; col++) {
int d = col-row;
if (d >= diag || d <= -diag) {
sum += matrix[row][col];
}
}
}
return sum;
}
计算第二个对角线上方和下方元素总和的调用如下所示:
int res = addUp(matrix, 5, 2);
其中5
是矩阵边长,2
是从中间算起的第二个对角线。