给定一个方阵,计算其对角线之和之间的绝对差。
例如,方阵如下图所示:
1 2 3
4 5 6
9 8 9
从左到右的对角线 =. 从右到左对角线 =. 他们的绝对区别是.
功能说明
完成下面的编辑器中的功能。
对角差分采用以下参数:
int arr[n][m] : 整数数组
返回
int:绝对对角线差
输入格式
第一行包含一个整数,, 方阵的行数和列数.
接下来的每一个行描述一行,, 并且由空格分隔的整数.
约束
输出格式
将矩阵的两条对角线之和之间的绝对差作为单个整数返回。
样本输入
3
11 2 4
4 5 6
10 8 -12
样本输出
15
解释
主对角线是:
11
5
-12
沿主对角线求和:11 + 5 - 12 = 4
次对角线是:
4
5
10
对角线的总和:4 + 5 + 10 = 19
差:|4 - 19| = 15
注意: |x| 是x的绝对值
解决代码
解决思路
1.首先第一个for循环拿到从左到右的所有数字然后存到arr1数组里面。
第一个数组 i = 0 取第一个0 所以 第一个应该为数组的 arr[0][0] ;
第二个数组 i = 1 取第二个1 所以 第二个应该为数组的 arr[1][1];
第二个数组 i = 2 取第二个2 所以 第二个应该为数组的 arr[2][2];
到这里就拿到了 从左到右的所有数组 并存到数组arr1中。
2.第二个fo循环 拿到从右到左的所有数组然后存到 arr2数组中。
第二个与第一个不同 for循环使用j–去实现
第一个数组 j= 2 取数组中的第三个数组 并且定义 io = 0; 就是拿到了 arr[2][0] 拿到了第三个的第一个数值 然后 io+=1。
第一个数组 j= 1 取数组中的第三个数组 并且定义 io = 1; 就是拿到了 arr[1][1] 拿到了第三个的第一个数值 io+=1。
第一个数组 j= 0 取数组中的第三个数组 并且定义 io = 2; 就是拿到了 arr[0][0] 拿到了第三个的第一个数值 最后当j===-1就跳出这个循环。
到这里就拿到了 从右到左的所有数组 并存到数组arr2中。
3.通过 方法getNum()分别到arr1 和arr2 的求和。
4.使用let result = Math.abs(getNum(arr1) - getNum(arr2)); 求出绝对值
var arr = [
[1, 2, 3],
[2, 3, 4],
[2, 3, 5]
];
function isArr(arr) {
let arr1 = [];
let arr2 = [];
let io = 0;
for (var i = 0; i < arr.length; i++) {
console.log(arr[i][i])
arr1.push(arr[i][i]);
}
for (var j = arr.length - 1; j >= 0; j--) {
arr2.push(arr[j][io]);
io += 1
console.log(i)
if (j === -1) {
break;
}
}
function getNum(arr) {
let num = 0
for (var i = 0; i < arr.length; i++) {
num += arr[i]
}
return num
}
console.log(getNum(arr1))
console.log(getNum(arr2))
let result = Math.abs(getNum(arr1) - getNum(arr2));
console.log(result, 'result')
console.log(arr1)
console.log(arr2)
}
isArr(arr);