0782 - Zona 1

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 care apar sub diagonala principală și sub diagonala secundară de cel puţin 2 ori. Fiecare valoare 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 numărul, în ordine strict crescătoare, valorile cerute, separate printr-un spaţiu.Î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 3 2 3 6
8 9 3 3 9 6
Ieșire
Datele sunt introduse corect.
3 9

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

def validare_date(n, a):

   # Verificăm dacă matricea respectă restricția impusă
   # și anume să conțină elemente mai mici decât 200.
   for i in range(n):
       for j in range(n):
           if a[i][j] >= 200:
               return False
   return True

def valorile_sub_diagonala(n, a):

   # Parcurgem matricea și adaugăm elementele sub diagonala secundară
   # și peste diagonala principală în lista v.
   v = []
   for i in range(n):
       for j in range(n):
           if i > j and i + j > n - 1:
               v.append(a[i][j])
   # Sortăm lista v în ordine crescătoare și căutăm elementele care se repetă și apar de cel puțin 2 ori.
   v.sort()
   rezultat = []
   for i in range(1, len(v)):
       if v[i] == v[i-1] and v[i] not in rezultat:
           rezultat.append(v[i])
   return rezultat

if __name__ == "__main__":

   # Citim dimensiunea matricei și elementele acesteia.
   n = int(input())
   a = []
   for i in range(n):
       linie = input()
       a.append([int(x) for x in linie.split()])
   # Verificăm dacă matricea este validă și afișăm valorile care respectă condițiile problemei, în ordine crescătoare.
   if not validare_date(n, a):
       print("Datele nu corespund restrictiilor impuse.")
   else:
       rezultat = valorile_sub_diagonala(n, a)
       print("Datele sunt introduse corect.")
       for x in rezultat:
           print(x, end=" ")
       print()

</syntaxhighlight>