给出一个正方形矩阵,计算其对角线之和之间的绝对差。
例如,方矩阵如下所示:
1 2 3
4 5 6
9 8 9
从左到右的对角线= 1 + 5 + 9 = 15。从右到左对角线= 3 + 5 + 9 = 17。它们的绝对差是| 15-17 | = 2。
功能说明
在下面的编辑器中完成对角线差异函数。它必须返回一个表示绝对对角线差的整数。
diagonalDifference采用以下参数:
arr:整数数组。
输入格式
第一行包含一个整数n,即矩阵arr中的行数和列数。 接下来的n行中的每一行都描述一行arr [i],并由n个以空格分隔的整数arr [i] [j]组成。
样本输入
3
11 2 4
4 5 6
10 8 -12
样本输出
15
我的代码:
def diagonalDifference(arr):
i = 0
j = 0
left = 0
right = 0
for x in range(arr+1):
left += arr[0 + i][0 + j]
right += arr[0 + i][n - j]
i += 1
j += 1
return abs(left - right)
这是我的代码。我不知道怎么了请帮忙。
问题是Hackerrank上的“对角线差异”。
编辑:第二次尝试
def diagonalDifference(arr):
left = 0
right = 0
for x in range(len(arr)):
left += arr[0+x][0+x]
right += arr[0+x][len(arr)-x]
return abs(left-right)
我收到以下错误:
right += arr[0+x][len(arr)-x]
IndexError: list index out of range
答案 0 :(得分:1)
您无法访问len(arr)-x
-对于x == 0,这是IndexError:
def diagonalDifference(arr): left = 0 right = 0 for x in range(len(arr)): left += arr[0+x][0+x] right += arr[0+x][len(arr)-x] return abs(left-right)
arr = [[1,2],[3,4]]
len_arr = len(arr) # len(arr) is 2, you index into arr[0][2-0] fox x==0
# but arr only has arr[0][0] and arr[0][1] for x == 0
您需要总结:
k[0][0], k[1][1], k[2][2], ..., k[n-1][n-1] where n = len(k) for the forward diag
和
k[0][n-1-0], k[1][n-1-1], k[2][n-1-2], ..., k[n-1][n-1-(n-1)] for the backward diag
按代码排列:
def diag (data, reverse=False):
ld = len(data)
if reverse:
return sum(data[i][ld-i-1] for i in range(ld))
else:
return sum(data[i][i] for i in range(ld))
k = [[0,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[0,22,23,24,25]]
print (diag(k)) # 64
print(diag(k,True)) # 44
def absDiagDiff(data):
return abs(diag(data)-diag(data,True))
print(absDiagDiff(k)) # 20
答案 1 :(得分:0)
#!/bin/python3
import math
import os
import random
import re
import sys
#
# Complete the 'diagonalDifference' function below.
#
# The function is expected to return an INTEGER.
# The function accepts 2D_INTEGER_ARRAY arr as parameter.
#
def diagonalDifference(arr):
diag1=0
diag2=0
for x in range(int(len(arr))):
y=list(reversed(list(range(len(arr[x])))))
diag1+=arr[x][x]
diag2+=arr[x][y[x]]
return abs(diag1-diag2)
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
n = int(input().strip())
arr = []
for _ in range(n):
arr.append(list(map(int, input().rstrip().split())))
result = diagonalDifference(arr)
fptr.write(str(result) + '\n')
fptr.close()
答案 2 :(得分:-1)
如果这有帮助,我会这样做:
n = int(input())
array = []
total1 = 0
total2 = 0
index = 0
for i in range(n):
array = [[] for n in range(n)]
for arrays in array:
arrays += map(int,input().split())
if len(arrays) != n:
print(f"Error, need to be {n} by {n}")
if index == 0:
for arrays in array:
total1 += arrays[index]
index += 1
elif index == n:
for arrays in array:
total2 += arrays[index-1]
index -= 1
print(abs(total1-total2))