0729 - Zona

From Bitnami MediaWiki
Revision as of 12:32, 26 April 2023 by Alexandra Leș (talk | contribs) (Pagină nouă: == Cerinţa == 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 == Programul citește de la tastatură numărul '''n''', apoi elementele matricei, linie cu linie. == Date...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>