0729 - Zona

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă o matrice pătratică cu n linii și n coloane și elemente numere naturale mai mici decât 1000. Să se afișeze în ordine strict crescătoare valorile situate sub diagonala principală și deasupra diagonalei secundare. Dacă o valoare apare în zona respectivă de mai multe ori, se va afișa o singură dată.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, apoi elementele matricei, linie cu linie.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou,în ordine strict crescătoare, valorile cerute, separate prin spații.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 200

Exemplu[edit | edit source]

Intrare
6
10 8 5 8 4 2
6 5 3 1 3 8
8 1 4 7 8 8
5 1 9 6 6 1
8 9 10 1 3 6
8 2 3 3 9 6
Ieșire
Datele sunt introduse corect.
1 5 6 8

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Functia de validare pentru matricea de intrare.

def validare(n: int, a: list[list[int]]) -> bool:

   # Verificăm dacă n se află în intervalul specificat
   if n < 1 or n > 200:
       return False
   # Verificăm dacă fiecare element al matricei se află în intervalul [0, 1000)
   for i in range(n):
       for j in range(n):
           if a[i][j] < 0 or a[i][j] >= 1000:
               return False
   return True


  1. Funcția care rezolvă problema și returnează valorile cerute.

def rezolva_matrice(n: int, a: list[list[int]]) -> list[int]:

   # Inițializăm un vector v de dimensiune 1000, initial cu valori 0
   v = [0] * 1000
   # Parcurgem matricea și setăm elementele corespunzătoare din v pe 1 dacă se află sub diagonala principală și
   # deasupra diagonalei secundare
   for i in range(n):
       for j in range(n):
           if i > j and i + j < n - 1:
               v[a[i][j]] = 1
   # Inițializam o lista rezultat cu valorile de 0 și apoi adaugăm valorile de 1 din v in ordine crescătoare
   rezultat = []
   for i in range(1000):
       if v[i] == 1:
           rezultat.append(i)
   return rezultat


  1. Programul principal

if __name__ == '__main__':

   # Citim n și matricea de la tastatură
   n = int(input())
   a = []
   for i in range(n):
       a.append(list(map(int, input().split())))
   # Verificăm dacă matricea îndeplineste cerințele problemei
   if validare(n, a):
       # Dacă matricea este validă, rezolvăm problema și afișăm rezultatul
       rezultat = rezolva_matrice(n, a)
       print("Datele sunt introduse corect.")
       print("Valorile cerute sunt:", " ".join(map(str, rezultat)))
   else:
       # Dacă matricea nu este valida, afișăm un mesaj corespunzator
       print("Datele nu corespund restricțiilor impuse.")

</syntaxhighlight>