黑客对角线差异,我的代码有什么问题?



给定一个方阵,计算其对角线总和之间的绝对差。

例如,方阵如下所示:

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)

这是我的代码。我不知道怎么了。请帮忙。

问题是黑客兰克的"对角线差异"。

编辑:第二次尝试

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

您无法访问len(arr)-x- 对于 x == 0,这是索引错误:

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
#!/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()

如果这有帮助,这是我的做法:

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))

最新更新