在二次矩阵中,我必须将在主对角线之上和之下形成的每个三角形相加,然后从下面的一个矩阵中减去一个三角形,例如,如果我有如下矩阵:

我想计算一下:
第一个三角形: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);
}
}我得到的是..。

请注意,我只能使用普通数组、没有预定义的方法、包装器或其他任何东西。
发布于 2018-01-18 21:44:37
在(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是从中间开始的第二对角线计数。
https://stackoverflow.com/questions/48330630
复制相似问题