0313 - Diagonale

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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