对角线差异

时间:2017-10-13 07:14:22

标签: java arrays for-loop

我在编程的同时开始编程对角线差异我想出了这种方法,

run cts-camera --skip-precondition

输入
3个
 11 2 4
 4 5 6
 10 8 -12

预期产出 15
我的输出 16

我正在寻找我出错的时间...... 非常感谢帮助...谢谢!

9 个答案:

答案 0 :(得分:2)

为什么这么多工作? 你需要一个非常小的代码:

for(int i = 0;i<n;i++){
    count1+=a[i][i];
    count2+=a[i][n-1-i];
}

答案 1 :(得分:0)

就弗兰克的答案而言,你实际上并不需要数组:

for(int i=0; i < n; i++){
  for(int j = 0; j < n; j++){
    int v = in.nextInt();
    count1 += (i == j) ? v : 0;
    count2 += (i + j == n-1) ? v : 0;
  }
}

答案 2 :(得分:0)

在Java中,解决方案将是

    int result = 0;
    for(int i = 0;i<n;i++){
        l+=a[i][i];
        r+=a[i][n-1-i];
    }
    result = abs(l-r);

对于那些希望在python中执行相同操作的人,方法如下:

def diagonalDifference(a):
    l = sum(a[i][i] for i in range(len(a)))
    r = sum(a[i][len(a)-1-i] for i in range(len(a)))
    return (abs(r- l))

答案 3 :(得分:0)

这里是Java语言。我使用forEach来提高可读性。您可以使用Java非常类似地完成此操作。

function diagonalDifference(arr) {
    let length = arr.length-1;
    let leftDiag = 0;
    let rightDiag = 0;


    arr.forEach((item, outerIndex) => {
        item.forEach((innerItem, innerIndex) => {
            if (outerIndex === innerIndex) {
                leftDiag = leftDiag + innerItem;
            }
            if (length - outerIndex === innerIndex) {
                rightDiag = rightDiag + innerItem;
            }
        });
    });

    return Math.abs(leftDiag - rightDiag);

}

答案 4 :(得分:0)

public static intagonalDifference(List> arr){

    int leftSum=0, rightSum=0;
    int i=-1;
    List <Integer> inner;
    Iterator<List<Integer>> list = arr.iterator();
    while (list.hasNext()){
        inner=list.next();
        i++;
        leftSum += inner.get(i);
        rightSum += inner.get(inner.size()-1-i);           

    }

    return Math.abs(leftSum-rightSum); 

}

答案 5 :(得分:0)

public static int diagonalDifference(List<List<Integer>> arr) {
    
    ListIterator<List<Integer>> itr = arr.listIterator();
    int i = 0,k=arr.size();
    int sumdia1=0 , sumdia2=0;
    List <Integer> inner;
    System.out.println(" k ::: "+k);
    while(itr.hasNext()) {
             inner = itr.next();
             k--;
            sumdia1= sumdia1 + inner.get(i);
            sumdia2= sumdia2+ inner.get(k);
            i++;
        
    }

答案 6 :(得分:0)

我在Java中对角线差异Hackerank的解决方案。

public static int diagonalDifference(List<List<Integer>> arr) {
    int primaryDiagnal = 0;
    int secDiagnal = 0;
    int diff;

    for(int i= 0; i<arr.get(0).size(); i++){
        primaryDiagnal += arr.get(i).get(i);
    }

    int col = arr.get(0).size() - 1;
    for(int i= 0; i<arr.get(0).size(); i++){
        secDiagnal += arr.get(i).get(col);
        col--;
    }

    diff = primaryDiagnal - secDiagnal;
    return Math.abs(diff);
 }

答案 7 :(得分:0)

您可以使用 size/2 遍历方法。这可能看起来令人生畏,但一旦您了解,您就会爱上它的光彩。

int i=arr.Count/2,j=i,sum=0;
        if(arr.Count%2 != 0){
           i--;
           j++; 
        }else{
            i--;
        }
        for(;i>=0;i--,j++){
        sum += arr[i].ElementAt(i)+arr[j].ElementAt(j)-arr[i].ElementAt(j)-arr[j].ElementAt(i);
        }
        return Math.Abs(sum); 

答案 8 :(得分:-1)

int k=0;
int l=0;
int m;
int z=arr.length;
int s=arr.length-1;
for(int i=0;i<z;i++) {
    for(int j=0;j<z;j++) {
        if(i==j){
            k=k+arr[i][j];
        }
    }
    l=l+arr[i][s];   
    s--;
}
if(l>k) {
    m=l-k;
} else {
    m=k-l;
}
return m;