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

时间:2019-04-19 09:45:04

标签: python python-3.x

给出一个正方形矩阵,计算其对角线之和之间的绝对差。

例如,方矩阵如下所示:

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

3 个答案:

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