我在编程的同时开始编程对角线差异我想出了这种方法,
run cts-camera --skip-precondition
输入
3个
11 2 4
4 5 6
10 8 -12
预期产出 15
我的输出 16
我正在寻找我出错的时间...... 非常感谢帮助...谢谢!
答案 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;