首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:主对角线之上和下面形成的三角形元素之和

Java:主对角线之上和下面形成的三角形元素之和
EN

Stack Overflow用户
提问于 2018-01-18 21:31:10
回答 1查看 1.5K关注 0票数 0

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

我想计算一下:

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

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

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

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

我不知道如何处理每个三角形形成的,这是我的问题

代码语言:javascript
复制
   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);

       }



}

我得到的是..。

请注意,我只能使用普通数组、没有预定义的方法、包装器或其他任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 21:44:37

在(row,col)对索引的矩阵中,考虑col-row差值的值:

代码语言:javascript
复制
     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)值是如何高于某个正数,对于主对角线以下的单元格是如何低于某个负数的。

可以使用索引的此属性将相应对角线以下或以上的值相加:

代码语言:javascript
复制
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;
}

计算第二对角线上和下元素之和的调用如下所示:

代码语言:javascript
复制
int res = addUp(matrix, 5, 2);

其中5是矩阵边的长度,2是从中间开始的第二对角线计数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48330630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档