0784 - Lin Col Egale
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
<syntaxhighlight lang="python" line>
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.")
</syntaxhighlight>