0784 - Lin Col Egale

From Bitnami 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

<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>