2877 - Sort Matrix Lin Col

From Bitnami MediaWiki

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>

  1. 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
  1. 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>