Java:将主对角线上方和下方形成的三角形的所有元素相加

标签 java matrix

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

enter image description here

我要计算:

第一个三角形:4 - 4 = 0

第二个三角形:( 4 + 4 + 5 ) - ( 4 + 3 + 1 ) = 6

第三个三角形:( 4 + 4 + 5 + 1 + 3 + 3 ) - ( 4 + 3 + 1 + 2 + 2 + 5) = 4

到目前为止,我想出了这个,它将计算对角线下方和上方三角形的所有元素。

I don't know how to do it for each triangle formed, and this is my question

   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);

       }



}

我得到的是......

enter image description here

请注意,除了普通数组之外,我不能使用任何东西,没有预定义的方法、包装器或任何东西。

最佳答案

在按(行,列)对索引的矩阵中,考虑 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是从中间算起的第二条对角线。

关于Java:将主对角线上方和下方形成的三角形的所有元素相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330630/

相关文章:

java - 如何编写 Java e2e(端到端)测试

java - 您如何为 Java servlet 编写单元测试?

java - 使用多播在 Java 中进行网络发现

Python 更快地打印 sympy 矩阵

c++ - 如何打印子矩阵?

c++ - 将 Vector 拆分为 block - 奇怪的结果

java - 为什么我的简化 DES 实现在 Cp1252 编码下工作正常,但在 UTF-8 编码下工作不佳?

Java Posix IPC 有 API 吗?

performance - 为什么在数据帧上运行 "unique"比 R 中的矩阵更快?

arrays - Matlab 不使用循环创建新的值数组