0223 - Min Cols 1

De la Universitas MediaWiki

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

# 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

# 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.")