0313 - Diagonale

De la Universitas MediaWiki

Cerinţa

Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Calculaţi diferenţa în valoare absolută dintre sumele elementelor de pe cele două diagonale.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n*n numere naturale, separate prin spaţii, reprezentând elementele matricei, linie cu linie.

Date de ieşire

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numărul D, reprezentând valoarea calculată.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 1 ⩽ n ⩽ 20
  • elementele matricei vor fi mai mici decât 10000

Exemplu

Intrare
4
8 3 3 7
1 1 6 5
8 7 1 1
9 8 7 1
Ieșire
Datele sunt introduse corect.
18

Explicație

Sumele elementelor pe cele două diagonale sunt: 11 şi 29. Diferenţa în valoare absolută este: 18

Rezolvare

from typing import List

def validare_date(n: int, matrice: List[List[int]]) -> bool:
    # Verifică dacă dimensiunea matricei este în intervalul corect
    if n < 1 or n > 20:
        return False
    # Verifică dacă toate elementele matricei sunt în intervalul corect
    for rand in matrice:
        for elem in rand:
            if elem < 0 or elem >= 10000:
                return False
    # Returnează True dacă matricea este validă
    return True


def calculeaza_diferenta_diagonalelor(n: int, matrice: List[List[int]]) -> int:
    # Inițializează sumele diagonalelor cu 0
    suma_dp, suma_ds = 0, 0
    # Calculează sumele elementelor de pe cele două diagonale
    for i in range(n):
        for j in range(n):
            if i == j:
                suma_dp += matrice[i][j]
            if i + j == n - 1:
                suma_ds += matrice[i][j]
    # Returnează diferența dintre cele două sume, calculată ca valoare absolută
    return abs(suma_dp - suma_ds)


if __name__ == '__main__':
    # Citește dimensiunea matricei de la tastatură
    n = int(input())
    # Inițializează matricea cu valorile citite de la tastatură
    matrice = []
    for i in range(n):
        rand = list(map(int, input().split()))
        matrice.append(rand)
    # Verifică dacă matricea este validă și afișează mesajul corespunzător
    if validare_date(n, matrice):
        print("Datele sunt introduse corect.")
        # Dacă matricea este validă, calculează diferența dintre diagonale și o afișează
        D = calculeaza_diferenta_diagonalelor(n, matrice)
        print(D)
    else:
        print("Datele nu corespund restrictiilor impuse.")