0766 - Nr Pare

De la Universitas MediaWiki

Sursă: [1]

Cerință

Se dă o matrice cu n linii şi m coloane şi elemente numere naturale. Determinați indicele liniei care conține număr maxim de elemente pare. Dacă există mai multe linii cu număr maxim de elemente pare, se vor afișa toți indicii, în ordine crescătoare.

Date de intrare

Programul citește de la tastatură numerele n şi m, iar apoi n*m numere naturale, separate prin spaţii, reprezentând elementele matricei, linie cu linie.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", Programul afișează pe ecran indicii liniilor cu număr maxim de elemente pare, în ordine crescătoare, separați prin câte un spaţiu. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 1 ≤ m,n ≤ 100
  • elementele matricei vor fi mai mici decât 10000
  • liniile matricei au indici de la 1 la n.

Exemple

Exemplu 1

Date de intrare
4 6
4 20 15 23 18 9
1 8 23 22 14 18
17 15 13 18 12 15
3 18 8 20 12 5
Date de ieșire
2 4

explicatie

Liniile 2 și 4 din matrice conțin număr maxim de elemente pare, 4

Rezolvare

def citire_lin_col():
    try:
        n = int(input("Introduceti numarul de linii: "))
        m = int(input("Introduceti numarul de coloane: "))
        if 1 <= n <= 100 and 1 <= m <= 100:
            print("Datele sunt corecte.")
            return n, m
        else:
            print("Datele nu sunt conform restrictiilor impuse.")
            exit()
    except ValueError:
        print("Trebuie introduse doar numere intregi.")
        exit()

def citeste_valori_matrice(lin, col):
    matrice = []
    for linie in range(lin):
        matrice.append([])
        for coloana in range(col):
            for i in range(3):
                try:
                    n = int(input(f"Introduceti un numar pentru linia {linie+1}, coloana {coloana+1}: "))
                    if n <= 10000:
                        print("Datele sunt corecte.")
                        matrice[linie].append(n)
                        break
                    else:
                        print("Datele nu sunt conform restrictiilor impuse.")
                except ValueError:
                    print("Trebuie introduse doar numere intregi.")
            else:
                print("Prea multe incercari esuate.")
                exit()
    return matrice

def elemente_pare_numar_max(matrice, n, m):
    max_contor = 0
    max_linii = []
    for i in range(n):
        contor = sum(1 for x in matrice[i] if x % 2 == 0)
        if contor > max_contor:
            max_contor = contor
            max_linii = [i+1]
        elif contor == max_contor:
            max_linii.append(i+1)

    if max_contor == 0:
        print("NU EXISTA")
    else:
        print(*max_linii)
if _name_ == "_main_":
    n, m = citire_lin_col()
    matrice = citeste_valori_matrice(n, m)
    elemente_pare_numar_max(matrice, n, m)

Explicatii

Funcția citire_lin_col() citește de la tastatură numărul de linii n și de coloane m ale matricei. Se verifică dacă valorile citite se încadrează în intervalul [1, 100]. Dacă valorile sunt corecte, funcția returnează valorile citite.
Funcția citeste_valori_matrice(lin, col) citește de la tastatură valorile matricei. Se verifică dacă fiecare valoare este un număr întreg și se încadrează în intervalul [1, 10000]. Dacă o valoare introdusă nu respectă restricțiile, utilizatorul este avertizat și i se cere să introducă o nouă valoare. Dacă utilizatorul nu poate introduce o valoare corectă după trei încercări, programul se va opri. Funcția returnează matricea completată.
Funcția elemente_pare_numar_max(matrice, n, m) determină indicele liniei care conține cele mai multe elemente pare în matrice. Se verifică dacă matricea are cel puțin un element par. Dacă matricea nu are elemente pare, se va afișa mesajul "NU EXISTA". Altfel, se va afișa indicele/indicii liniilor care conțin cele mai multe elemente pare, în ordine crescătoare.
Funcția main() este punctul de intrare în program. Se citesc dimensiunile matricei și valorile acesteia utilizând funcțiile citire_lin_col() și citeste_valori_matrice(). Apoi, se determină indicele/indicii liniilor care conțin cele mai multe elemente pare în matrice utilizând funcția elemente_pare_numar_max().