0762 - Identice 2

De la Universitas MediaWiki

Sursă: [1]

Cerinţa

Se dă o matrice cu n linii și m coloane și elemente numere naturale. Să se determine câte perechi de linii din matrice sunt identice.

Date de intrare

Programul citește de la tastatură numerele n m, iar apoi n șiruri cu câte m numere naturale, reprezentând elementele matricei.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte."Programul va afișa pe ecran numărul C, reprezentând valoare determinată. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 1 ≤ n , m ≤ 100
  • elementele matricei sunt numere naturale mai mici decât 1.000.000

Exemple

Exemplu 1

Date de intrare
6 3
10 2 5
2 1 4
10 2 5
7 10 9
10 2 5
2 1 4
Date de iesire
4

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 1 <= n <= 100 and 1 <= m <= 100:
            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 <= 1000000:
                    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 identice2(n, m, matrice):
    cnt = 0
    for i in range(n - 1):
        for k in range(i + 1, n):
            ok = all(matrice[i][j] == matrice[k][j] for j in range(m))
            if ok:
                cnt += 1

    print(cnt)

if _name_ == "_main_":
    n, m, matrice = citire_matrice()
    print("Matricea initiala:")
    for linie in matrice:
        print(linie)
    print("Numarul de perechi de linii consecutive identice:")
    identice2(n, m, matrice)

Explicații

Acest cod reprezintă o soluție pentru problema de a determina câte perechi de linii consecutive identice există într-o matrice dată.
Funcția citire_matrice() se ocupă de citirea datelor de intrare de la tastatură și returnează numărul de linii și coloane ale matricei, precum și matricea propriu-zisă. Mai întâi se verifică dacă numărul de coloane este impar (conform cerințelor problemei) și se validează datele de intrare (numerele de linii și coloane trebuie să fie cuprinse între 1 și 100, iar elementele matricei să fie numere naturale mai mici decât 1.000.000).
Funcția identice2() primește ca parametri numărul de linii și coloane ale matricei și matricea însăși. Apoi, folosind două bucle for, se compară fiecare pereche de linii din matrice (exceptând cele cu aceeași poziție) și se verifică dacă sunt identice. Pentru a verifica acest lucru, se folosește funcția all() împreună cu o expresie generatoare, care verifică dacă elementele de pe fiecare poziție a celor două linii sunt egale. Dacă da, se incrementează un contor cnt. La final, funcția afișează valoarea acestui contor.
În funcția main(), se apelează mai întâi funcția citire_matrice() pentru a obține datele de intrare. Apoi, se afișează matricea inițială și se apelează funcția identice2() pentru a determina numărul de perechi de linii consecutive identice