0998 - Matrice 6

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se consideră o matrice pătratică cu n linii şi n coloane şi elemente numere naturale. Să se modifice matricea în felul următor: toate elementele de pe liniile care conţin valoare maximă din matrice vor fi mărite cu valoarea minimă din matrice.

Date de intrare[edit | edit source]

Fișierul de intrare matrice6.in conține pe prima linie numărul n, iar următoarele n linii câte n numere naturale, reprezentând elementele matricei.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect,în fișier 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 fişierului, elementele fiecărei linii fiind separate prin exact un spaţiu.În cazul contrar,se va afișa în fișier "Datele nu corespund restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 100
  • elementele matricei vor fi mai mici decât 1 000 000 000

Exemplu[edit | edit source]

matrice6.in
4
2 5 3 2
2 2 4 4
3 2 2 2
5 3 5 2
matrice6.out
Datele sunt introduse corect.
4 7 5 4
2 2 4 4
3 2 2 2
7 5 7 4

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

def validare(n: int, matrice: list[list[int]]) -> bool:

   # Verificăm dacă numărul de linii și coloane ale matricei este cel puțin 1 și cel mult 100
   if n < 1 or n > 100:
       return False
   # Verificăm dacă matricea are n linii și n coloane
   if len(matrice) != n:
       return False
   for linie in matrice:
       if len(linie) != n:
           return False
   # Verificăm dacă toate elementele matricei sunt numere naturale mai mici decât 1 000 000 000
   for linie in matrice:
       for element in linie:
           if not isinstance(element, int) or element < 0 or element >= 1000000000:
               return False
   return True


def rezolvare(n: int, matrice: list[list[int]]) -> list[list[int]]:

   # Găsim valoarea maximă și valoarea minimă din matrice
   Max = matrice[0][0]
   Min = matrice[0][0]
   for linie in matrice:
       for element in linie:
           if element > Max:
               Max = element
           if element < Min:
               Min = element
   # Identificăm liniile care conțin valoarea maximă
   liniile_maximului = []
   for i, linie in enumerate(matrice):
       if Max in linie:
           liniile_maximului.append(i)
   # Adăugăm valoarea minimă la fiecare element de pe liniile identificate anterior
   for i in liniile_maximului:
       for j in range(n):
           matrice[i][j] += Min
   return matrice


if __name__ == '__main__':

   with open('matrice6.in', 'r') as fin:
       n = int(fin.readline())
       matrice = [list(map(int, fin.readline().split())) for _ in range(n)]
   if validare(n, matrice):
       matrice_modificata = rezolvare(n, matrice)
       with open('matrice6.out', 'w') as fout:
           fout.write("Datele sunt introduse corect.\n")
           for linie in matrice_modificata:
               fout.write(' '.join(str(element) for element in linie) + '\n')
   else:
       with open("matrice6.out", "w") as f_out:
           fout.write("Datele nu corespund restricțiilor impuse.")

</syntaxhighlight>