0223 - Min Cols 1
Enunț
Se consideră un tablou bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult două cifre fiecare.
Cerinţa
Să se determine ultima cifră a produsului elementelor de pe diagonala secundară cu proprietatea că sunt minime pe coloanele lor.
Date de intrare
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
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
- 2 ⩽ n ⩽ 30
- dacă în matrice nu există asemenea elemente, se va afișa mesajul NU EXISTA
Exemplu
- 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
Dintre valorile de pe diagonala secundară, sunt minime pe coloanele lor 7 şi 3. Produsul lor este 21, iar ultima cifră este 1.
Rezolvare
<syntaxhighlight lang="python" line>
- 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
- Funț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>