2340 – Sumă Min Max

De la Universitas MediaWiki

Sursa: Suma Min Max


Cerinţă

Scrieți funcția sumaMinMax care primește ca parametri un tablou unidimensional sir format din n elemente și un număr natural n. Funcția va returna un vector cu două elemente, primul element reprezentând cea mai mică sumă formată din exact n-1 elemente dintre cele n ale lui sir, iar cel de-al doilea element reprezentând cea mai mare sumă formată din exact n-1 elemente dintre cele n ale lui sit.

Date de intrare

Programul va citi de la tastatură valoarean, apoi n numere întregi reprezentând elementele șirului.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa noul vector, care conține cele 2 valori menționate mai sus. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

Restricţii şi precizări

  • 1 <= n <= 100
  • valorile elementelor șirului vor fi cuprinse între 1 și 50

Exemple

Exemplul 1

Intrare
Introduceti numarul de elemente a sirului: 5
Introduceti 5 numere separate prin spatiu:1 2 3 4 5
Ieșire
Datele introduse sunt corecte!
[10, 14]

Exemplul 2

Intrare
Introduceti numarul de elemente a sirului: 6
Introduceti 6 numere separate prin spatiu:13 23 2 3 1 6
Ieșire
Datele introduse sunt corecte!
[25, 47]

Exemplul 3

Intrare
Introduceti numarul de elemente a sirului: 3
Introduceti 3 numere separate prin spatiu:132 13 1
Ieșire
Datele introduse sunt incorecte!

Rezolvare

def is_integer(value):
    return value.isdigit()


def verificare_nr_elemente(n):
    if is_integer(n):
        if 1 <= int(n) <= 100:
            return n
        else:
            print("Datele introduse sunt incorecte!")
            exit()
    else:
        print("Datele introduse sunt incorecte!")
        exit()


def verificare_vector(n, vector):
    if len(vector) != int(n):
        print("Datele introduse sunt incorecte!")
        exit()
    else:
        for i in vector:
            if is_integer(i):
                if 1 <= int(i) < 50:
                    continue
                else:
                    print("Datele introduse sunt incorecte!")
                    exit()
            else:
                print("Datele introduse sunt incorecte!")
                exit()


def suma_min_max(sir, n):
    sir.sort()
    min_sum = 0
    for i in range(n - 1):
        min_sum += sir[i]
    max_sum = 0
    for i in range(1, n):
        max_sum += sir[i]
    res = [min_sum, max_sum]
    print(res)


if __name__ == '__main__':
    n = input("Introduceti numarul de elemente a sirului: ")
    verificare_nr_elemente(n)
    elem = input(f"Introduceti {n} numere separate prin spatiu:").split()
    verificare_vector(n, elem)
    lst_int = list(map(int, elem))
    print("Datele introduse sunt corecte!")
    suma_min_max(lst_int, int(n))

Explicație rezolvare

Acest program primește ca input un număr natural reprezentând numărul de elemente ale unui tablou, urmat de o listă de numere întregi separate prin spațiu. Programul verifică mai întâi dacă numărul introdus ca input este un număr natural în intervalul [1, 100] prin apelul funcției verificare_nr_elemente. Dacă inputul nu este valid, programul afișează un mesaj de eroare și se încheie prin apelul funcției exit().

Funcția verificare_nr_elemente utilizează funcția is_integer pentru a verifica dacă inputul este un număr valid. Dacă acest lucru este adevărat, funcția verifică dacă inputul este un număr natural în intervalul [1, 100]. Dacă inputul nu este valid, programul afișează un mesaj de eroare și se încheie prin apelul funcției exit().

După ce inputul a fost validat, programul continuă prin apelul funcției verificare_vector, care verifică dacă lista de numere introdusă ca input are dimensiunea corespunzătoare și dacă fiecare element din listă este un număr întreg între 1 și 49. Dacă aceste condiții nu sunt îndeplinite, programul afișează un mesaj de eroare și se încheie prin apelul funcției exit().

Dacă inputul este validat cu succes, programul apelează funcția suma_min_max pentru a calcula cea mai mică și cea mai mare sumă formată din exact n-1 elemente dintre cele n ale lui v. Funcția suma_min_max sortează mai întâi lista de numere primite ca input, apoi calculează suma primelor n-1 numere ca fiind cea mai mică sumă și suma tuturor elementelor din lista de numere cu excepția primului element ca fiind cea mai mare sumă. Funcția returnează un tablou cu cele două sume calculate.

În cele din urmă, programul afișează tabloul returnat de funcția suma_min_max.