2877 - Sort Matrix Lin Col
Cerinţa
Se dă o matrice pătratică de dimensiune n. Să se ordoneze crescător fiecare linie a matricei, apoi să se ordoneze crescător fiecare coloană a acesteia.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi elementele matricei. Fiecare linie se află pe câte un rând, elementele fiecărei linii fiind separate prin câte un spațiu.
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 matricea modificată, câte o linie a matricei pe o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spațiu.Î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
Exemplul 1
- Intrare
- 3
- 4 1 3
- 9 6 8
- 5 2 7
- Ieșire
- Datele sunt introduse corect.
- 1 3 4
- 2 5 7
- 6 8 9
Exemplul 2
- Intrare
- 4
- 12 7 1 8
- 20 9 11 2
- 15 4 5 13
- 3 18 10 6
- Ieșire
- Datele sunt introduse corect.
- 1 5 8 12
- 2 6 10 15
- 3 7 11 18
- 4 9 13 20
Rezolvare
<syntaxhighlight lang="python" line>
- Funcție de validare a datelor de intrare conform cerințelor problemei.
def validare_date_intrare(n, a):
if not 1 <= n <= 100: return False for linie in a: for elem in linie: if elem > 999: return False return True
- Funcția principală care primește matricea și returnează matricea ordonată crescător pe fiecare linie și coloană.
def ordonare_matrice(n, a):
for i in range(n): a[i].sort() # ordonare crescătoare pe linii a_transpusa = [list(x) for x in zip(*a)] # transpunerea matricei for i in range(n): a_transpusa[i].sort() # ordonare crescătoare pe coloane a_ordonata = [list(x) for x in zip(*a_transpusa)] # transpunerea inversă a matricei return a_ordonata
if __name__ == '__main__':
n = int(input()) a = [list(map(int, input().split())) for _ in range(n)] if not validare_date_intrare(n, a): print("Datele nu corespund restricțiilor impuse.") else: print("Datele sunt introduse corect.") a_ordonata = ordonare_matrice(n, a) for linie in a_ordonata: print(*linie)
</syntaxhighlight>