我正在尝试计算它,但我得到的只是零我需要计算主要对角线元素和次要对角线元素的总和,然后计算它们总和的绝对差值。
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 sum=0;
int i=0;
int j=0;
int k=n-1;
int sum1=0;
for(i=0; i < n; i++){
for(j=0; j < n; j++){
a[i][j] = in.nextInt();
}
}
int temp=n;
int temp2=n;
while(temp>0 && i<n && j<n)
{
sum=a[i][j]+sum;
temp=temp-1;
i++;j++;
}
while(temp2>0 && i<n && k>=0)
{
sum1=a[i][k]+sum1;
temp2=temp2-1;
i++; k--;
}
int diff=sum-sum1;
if(diff<0)
diff=-1*diff;
System.out.println(diff);
}
}
答案 0 :(得分:1)
在第一个for循环之后,i和j都达到了值n。这意味着,i = n
和j = n
。
所以虽然循环不会通过。为避免这种情况,请再次初始化i和j。
i = 0;
j = 0;
while(temp>0 && i<n && j<n)
{
sum=a[i][j]+sum;
temp=temp-1;
i++;j++;
}
i = 0;
while(temp2>0 && i<n && k>=0)
{
sum1=a[i][k]+sum1;
temp2=temp2-1;
i++; k--;
}
替代方案:您可以使代码更简单。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[][] = new int[n][n];
int sum = 0, sum1 = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = in.nextInt();
// primary diagonal
if (i == j) {
sum += a[i][j];
}
// secondary diagonal
if (i == n - j - 1) {
sum1 += a[i][j];
}
}
}
System.out.println(Math.abs(sum - sum1));
}