0784 - Lin Col Egale

De la Universitas MediaWiki

Cerinţa

Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Să se determine câte elemente ale matricei se află pe linii și coloane de sumă egală. Elementul a[i,j] va fi numărat dacă suma elementelor de pe linia i este egală cu cea de pe coloana j.

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 C, 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 ⩽ 100
  • elementele matricei vor fi mai mici decât 1.000.000

Exemplu

Date de intrare
5
3 1 8 5 4
7 8 5 1 2
2 2 6 7 3
9 8 1 3 6
7 5 3 1 7
Date de ieșire
Datele sunt introduse corect.
2

Explicație

Cele două elemente se află pe linia 2, coloana 3, respectiv linia 5, coloana 3.

Rezolvare

from typing import List
def validare_date(n: int, matrice: List[List[int]]) -> bool:
    # Verifică dacă n are valoarea potrivită
    if n < 1 or n > 100:
        return False

    # Verifică dacă matricea are dimensiunea potrivită
    if len(matrice) != n:
        return False
    for linie in matrice:
        if len(linie) != n:
            return False

    # Verifică dacă toate elementele matricei sunt numere naturale mai mici decât 1000
    for linie in matrice:
        for elem in linie:
            if not (isinstance(elem, int) and 0 <= elem < 1000):
                return False

    return True


def determina_nr_elemente(n: int, matrice: List[List[int]]) -> int:
    # Inițializăm două liste goale, V si H, pentru a calcula sumele elementelor de pe fiecare linie și coloană
    V = [0] * (n + 1)
    H = [0] * (n + 1)

    # Parcurgem matricea și adunăm elementele de pe fiecare linie și coloana în listele V si H
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            V[i] += matrice[i - 1][j - 1]
            H[j] += matrice[i - 1][j - 1]

    # Initializam numar_elemente_egale cu 0, pentru a numara elementele care se află pe o linie și o coloană al caror sume sunt egale
    numar_elemente_egale = 0

    # Parcurgem din nou matricea ăi numărăm elementele care se află pe o linie și o coloană al caror sume sunt egale
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            if V[i] == H[j]:
                numar_elemente_egale += 1

    # Returnăm numarul de elemente care se află pe o linie și o coloană al căror sume sunt egale
    return numar_elemente_egale



if __name__ == "__main__":
    # Citire date de intrare
    n = int(input())
    matrice = []
    for i in range(n):
        linie = [int(elem) for elem in input().split()]
        matrice.append(linie)

    # Validare date de intrare
    if validare_date(n, matrice):
        # Calculare și afișare rezultat
        C = determina_nr_elemente(n, matrice)
        print("\nDatele sunt introduse corect.\n")
        print(C)
    else:
        print("Datele nu corespund restrictiilor impuse.")