代码的目的是找出矩阵的2个相对对角线的总和之间的差异。代码:
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
int N=scn.nextInt();
int diag1=0;
int diag2=0;
int[][] matrix=new int[N][N];
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
matrix[i][j]=scn.nextInt();
System.out.print(" ");
}
System.out.println();
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(i==j)
diag1+=matrix[i][j];
//System.out.println(diag1);
}
}
int counter1=0, counter2=N-1;
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(i==counter1 && j==counter2){
diag2+=matrix[i][j];
counter1++;
counter2--;
}
}
}
System.out.println(diag1); // used this for checking purpose
System.out.println(diag2); // used this for checking purpose
System.out.println(Math.abs(diag1-diag2));
我得到了确切的输出,但是HackerRank的测试用例仍然显示代码失败。有人可以解释原因吗? THe code challenge is mentioned here
删除所有额外的打印语句后,我得到了输出!
答案 0 :(得分:1)
你在这里有一些不必要的打印声明,删除它们
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
matrix[i][j]=scn.nextInt();
System.out.print(" ");
}
System.out.println();
}
黑客等级只需要差异,单个空格或单个新行也被视为不同的答案。
我还建议你在一个循环中计算两个总和。
for(int i = 0, j = n - 1; i < n; ++i, j --)
{
sum1 += a[i][i];
sum2 += a[i][j];
}
System.out.println(Math.abs(sum1 - sum2));
答案 1 :(得分:0)
您正在打印代码中的解决方案以外的数据。因此,输出不与他们相同。
删除除打印实际结果的所有System.out.print()
和System.out.println()
来电。
无关注意:要访问矩阵的对角线,不需要遍历所有行和列。对角线处于非常特定的坐标,因此您应该检查这些坐标。这将使您的代码更有效。
答案 2 :(得分:0)
运行的代码应该具有最低的复杂性,并且应该打印确切的输出。如果在hackerrank中插入以下代码将取得成功。另请注意提供错误的测试用例,它们暗示了代码中的错误。
int sum1=0;
int sum2=0;
for(int i = 0, j = n - 1; i < n; ++i, j --){
sum1=sum1+a[i][i];
sum2=sum2+a[i][j];
}
System.out.println(abs1(sum1-sum2));
答案 3 :(得分:0)
public class DiagonalMatrix{
static int diagonalDifference(int[][] a) {
// Complete this function
int sum1=0, sum2=0;
for(int a_i = 0; a_i < a.length; a_i++){
for(int a_j = 0; a_j < a.length; a_j++){
if(a_i==a_j)
{
sum1+=a[a_i][a_j];
}
}
}
for(int b_i = 0, b_j=a.length-1; b_i < a.length && b_j>=0; b_i++, b_j--){
sum2+=a[b_i][b_j];
}
return Math.abs(sum1-sum2);
}
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 result = diagonalDifference(a);
System.out.println(result);
in.close();
}
}
答案 4 :(得分:0)
您可以使用以下简单代码:
int result = 0;
for(int i = 0;i<n;i++){
l+=a[i][i];
r+=a[i][n-1-i];
}
result = abs(l-r);
System.out.println(result)
答案 5 :(得分:-1)
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int diognalleft = 0;
int diognalright = 0;
int [][] array = new int[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
array[i][j]=in.nextInt();
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if (i == j)
{
diognalleft = diognalleft + array[i][j];
}
if( (i+j) == (n-1) )
{
diognalright = diognalright + array[i][j];
}
}
}
System.out.println(Math.abs(diognalleft - diognalright));
}
}