在2d数组中添加对角线值

我有以下2d数组

int [][] array = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}, {20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, {30, 31, 32, 33, 34, 35, 36, 37, 38, 39}, {40, 41, 42, 43, 44, 45, 46, 47, 48, 49}, {50, 51, 52, 53, 54, 55, 56, 57, 58, 59}, {60, 61, 62, 63, 64, 65, 66, 67, 68, 69}, {70, 71, 72, 73, 74, 75, 76, 77, 78, 79}, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89}, {90, 91, 92, 93, 94, 95, 96, 97, 98, 99}}; 

我有这个代码来查找数组中所有值的总和。 如何修改它只添加从0开始的对角线值(0 + 11 + 22 + 33等)?

  public static int arraySum(int[][] array) { int total = 0; for (int row = 0; row < array.length; row++) { for (int col = 0; col < array[row].length; col++) total += array[row][col]; } return total; } 

由于对角线处于完美的方形,您只需要一个环来添加对角线。


从orgin添加对角线:

 public static int arraySum(int[][] array){ int total = 0; for (int row = 0; row < array.length; row++) { total += array[row][row]; } return total; } 

添加两个对角线:

从orgin添加对角线:(注意它将中心添加两次......如果需要,你可以减去一个)

 public static int arraySum(int[][] array){ int total = 0; for (int row = 0; row < array.length; row++) { total += array[row][row] + array[row][array.length - row-1]; } return total; } 
 public static int arraySum(int[][] array) { int total = 0; for (int index = 0; index < array.length; index++) { total += array[index][index]; } return total; } 

这当然假设尺寸为mxm。

这是我的解决方案 –

 import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int a[][] = new int[n][n]; for(int a_i=0; a_i < n; a_i++){ for(int a_j=0; a_j < n; a_j++){ a[a_i][a_j] = in.nextInt(); } } int l_sum = 0; for(int i = 0; i 
 import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int leftStartDiagnol = 0; int rightStartDiagnol = n; int leftTotal = 0; int rightTotal = 0; int a[][] = new int[n][n]; for (int a_i = 0; a_i < n; a_i++) { for (int a_j = 0; a_j < n; a_j++) { a[a_i][a_j] = in.nextInt(); } } for (int a_i = 0; a_i < n; a_i++) { boolean leftNotFound = true; boolean rightNotFound = true; rightStartDiagnol = --rightStartDiagnol; for (int a_j = 0; a_j < n; a_j++) { if (leftStartDiagnol == a_j && leftNotFound) { leftTotal = leftTotal + a[a_i][a_j]; leftNotFound = false; } if (rightStartDiagnol == a_j && rightNotFound) { rightTotal = rightTotal + a[a_i][a_j]; rightNotFound = false; } } leftStartDiagnol = ++leftStartDiagnol; } int data = leftTotal - rightTotal; System.out.println(Math.abs(data)); } } 

这是我的解决方案。 看看吧。

 import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int a[][] = new int[n][n]; int total1=0; int total2=0; for(int a_i=0; a_i < n; a_i++){ for(int a_j=0; a_j < n; a_j++){ a[a_i][a_j] = in.nextInt(); } total1+= a[a_i][a_i]; total2+=a[a_i][n-1-a_i]; } System.out.println(Math.abs(total1-total2)); } 

}

 import java.io.*; import java.util.*; public class DigArraySum { public static void main(String[] args) { Scanner s=new Scanner(System.in); int n=Integer.parseInt(s.nextLine()); //array size int[][] a=new int[n][n]; // new array for (int i=0;i 

说明:例如3 * 3矩阵:3 //数组大小

11 2 4

4 5 6

10 8 -12

主要对角线是:11 5 -12

主要对角线的总和:11 + 5 - 12 = 4

次要对角线是:4 5 10 次要对角线的总和:4 + 5 + 10 = 19

总和:| 4 + 19 | = 23

PHP解决方案。 逻辑与此处已发布的完全相同。 它只在PHP中有所不同。

  

解决方案是:

 int total = 0; for (int row = 0; row < array.length; row++) { total += array[row][row] + array[row][array.length - row - 1]; } System.out.println("FINAL ANSWER: " + total); 

这是我用来找到主对角线数和辅助对角线数之和的代码

 static int diagSum(int[][] arr) { int pd=0; int sd=0; int sum=0; for(int i=0;i<=arr.length-1;i++){ pd=pd+arr[i][i]; } for (int k=0,l=arr.length-1; k=0 ; k++,l--) { sd=sd+arr[k][l]; } sum=pd+sd; return sum; }