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