0784 - Lin Col Egale

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