0212 - Max Min Matrice

De la Universitas MediaWiki

Sursa: [1]

Enunt

Se consideră tabloul bidimensional cu m linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare.

Cerinţa

Să se determine cea mai mică valoare de pe fiecare linie, iar dintre acestea să se determine valoarea maximă.

Date de intrare

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

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse.". Fişierul de ieşire maxminmatrice.out va conţine pe prima linie numărul cerut, cea mai mare valoare dintre minimele de pe linii. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 2 ≤ m, n ≤ 23
  • elementele tabloului sunt mai mici decât 1000.

Exemple

Exemplu 1

maxminmatrice.in
3 5
3 2 7 13 5
10 9 12 6 9
7 4 5 6 3
maxminmatrice.out
6

Explicatie

Minimele de pe cele trei linii sunt: 2 6 3. Dintre acestea, cea mai mare valoare este 6.

Rezolvare

def citire_matrice():
    try:
        n = int(input("Introduceti numarul de linii: "))
        m = int(input("Introduceti numarul de coloane: "))
        if m % 2 == 0:
            print("Numarul de coloane trebuie sa fie impar.")
            exit()
        if 2 <= n <= 23 and 2 <= m <= 23:
            print("Datele sunt corecte.")
        else:
            print("Datele nu sunt conform restrictiilor impuse.")
            exit()
    except ValueError:
        print("Trebuie introduse doar numere intregi.")
        exit()

    matrice = []
    for linie in range(n):
        linie_matrice = []
        for coloana in range(m):
            try:
                valoare = int(input(f"Introduceti un numar pentru linia {linie+1}, coloana {coloana+1}: "))
                if valoare <= 1000:
                    print("Datele sunt corecte.")
                    linie_matrice.append(valoare)
                else:
                    print("Datele nu sunt conform restrictiilor impuse.")
                    exit()
            except ValueError:
                print("Trebuie introduse doar numere intregi.")
                exit()
        matrice.append(linie_matrice)

    return n, m, matrice

def maxminmatrice():
    with open("maxminmatrice.in", "r") as fin:
        n, m = map(int, fin.readline().split())
        a = []
        for i in range(n):
            mini = 1001
            row = list(map(int, fin.readline().split()))
            for j in range(m):
                if row[j] < mini:
                    mini = row[j]
            a.append(row)
        fin.close()

    v = []
    for i in range(n):
        v.append(min(a[i]))

    v.sort()
    with open("maxminmatrice.out", "w") as fout:
        fout.write(str(v[-1]))
        fout.close()

if _name_ == "_main_":
    maxminmatrice()

Explicații

Acest cod realizează două funcții: citire_matrice() și maxminmatrice(), și o verificare if _name_ == "_main_": pentru a rula maxminmatrice() atunci când fișierul este executat direct.
Funcția citire_matrice() citeste datele de intrare de la tastatură și construiește o matrice, aplicând anumite restricții impuse pentru a verifica validitatea datelor introduse. Funcția întoarce dimensiunile matricei și matricea propriu-zisă.
Funcția maxminmatrice() citeste datele de intrare din fișierul "maxminmatrice.in" și calculează cea mai mică valoare de pe fiecare linie, iar dintre acestea calculează valoarea maximă. Rezultatul este scris în fișierul "maxminmatrice.out".