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