0223 - Min Cols 1

From Bitnami MediaWiki
Revision as of 18:57, 2 May 2023 by Diana Butuza (talk | contribs) (→‎Rezolvare)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunț[edit | edit source]

Se consideră un tablou bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult două cifre fiecare.

Cerinţa[edit | edit source]

Să se determine ultima cifră a produsului elementelor de pe diagonala secundară cu proprietatea că sunt minime pe coloanele lor.

Date de intrare[edit | edit source]

Fişierul de intrare mincols1.in conţine pe prima linie numărul n, iar pe următoarele n linii câte n numere naturale separate prin spaţii, reprezentând elementele tabloului.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect,în fişierul de ieşire mincols1.out se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou va conţine un singur număr, reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

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

  • 2 ⩽ n ⩽ 30
  • dacă în matrice nu există asemenea elemente, se va afișa mesajul NU EXISTA

Exemplu[edit | edit source]

mincols1.in
4
3 4 90 10
25 2 7 9
18 3 10 4
3 7 20 3
mincols1.out
Datele sunt introduse corect.
1

Explicație[edit | edit source]

Dintre valorile de pe diagonala secundară, sunt minime pe coloanele lor 7 şi 3. Produsul lor este 21, iar ultima cifră este 1.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Funcție care verifică dacă datele de intrare respectă condițiile problemei.

def validare(n, a):

   if n < 2 or n > 30:
       return False
   for i in range(n):
       for j in range(n):
           if a[i][j] < 0 or a[i][j] > 99:
               return False
   return True
  1. Funcție care determină ultima cifră a produsului elementelor de pe diagonala secundară cu proprietatea că sunt minime pe coloanele lor.

def ultima_cifra_produsului_diag_sec_min_pe_coloane(n, a):

   p = 1
   exista_minim_pe_coloane = False
   for i in range(n):
       j = n - i - 1  # indicii elementelor de pe diagonala secundară
       minim_pe_coloana = min(a[k][j] for k in range(n))
       if a[i][j] == minim_pe_coloana:
           exista_minim_pe_coloane = True
           p = (p * a[i][j]) % 10
   if exista_minim_pe_coloane:
       return p
   else:
       print("NU EXISTA")

if __name__ == "__main__":

   # Citim datele de intrare din fișierul "mincols1.in".
   with open("mincols1.in") as f:
       n = int(f.readline())
       a = [list(map(int, f.readline().split())) for _ in range(n)]
   # Verificăm dacă datele de intrare sunt valide.
   if validare(n, a):
       # Apelăm funcția care calculează rezultatul cerut.
       rezultat = ultima_cifra_produsului_diag_sec_min_pe_coloane(n, a)
       if rezultat is not None:
           # Scriem rezultatul în fișierul de ieșire "mincols1.out".
           with open("mincols1.out", "w") as g:
               g.write("Datele sunt introduse corect.\n")
               g.write(str(rezultat))
   else:
       # Scriem un mesaj de eroare în fișierul de ieșire "mincols1.out".
       with open("mincols1.out", "w") as g:
           g.write("Datele nu corespund restricțiilor impuse.")

</syntaxhighlight>