0487 - Numarare2

De la Universitas MediaWiki

Sursa: - Numarare2


Cerinţa

Se dă un vector cu n numere naturale. Să se determine câte dintre elemente au valoarea strict mai mare decât media aritmetică a elementelor vectorului.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou va afișa numărul C, reprezentând valoarea cerută. În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ⩽ n ⩽ 200
  • elementele vectorului vor fi cuprinse între 0 și 1.000

Exemple

Exemplul 1

Intrare
5
5 0 2 1 4
Ieșire
Datele sunt introduse corect.
2

Explicație exemplul 1

Media aritmetică a elementelor este 2.4. În vector sunt 2 elemente cu valoarea strict mai mare decât 2.4: 5 4

Exemplul 2

Intrare
1234
1 2 3
Ieșire
Datele nu corespund restricțiilor impuse.


Rezolvare

# 0487 Numarare2

def nr_elem_cu_val_strict_mai_mare_decat_media_aritm(vector, n):
    suma = sum(vector)
    medie = suma / n
    C = sum(1 for x in vector if x > medie)
    print(C)


def citire_conform_restrictiilor(vector, n):
    if n < 1 or n > 200:
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    for x in vector:
        if x < 0 or x > 1000:
            print("Datele nu corespund restricțiilor impuse.")
            exit()
    if n != len(vector):
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    print("Datele sunt introduse corect.")


if __name__ == '__main__':
    n = int(input())
    vector = list(map(int, input().split()))
    citire_conform_restrictiilor(vector, n)
    nr_elem_cu_val_strict_mai_mare_decat_media_aritm(vector, n)

Explicație rezolvare

   Programul de mai sus conține două funcții, funcția nr_elem_cu_val_strict_mai_mare_decat_media_aritm(vector, n) și funcția citire_conform_restrictiilor(vector, n), care se vor rula în interiorul main-ului (if __name__ == '__main__' , linia 24) după citirea numărului n (linia 25) și celor n numere pe care le vom pune în șirul „vector” (linia 26).
După ce am citit elementele, se va apela funcția citire_conform_restrictiilor(vector, n) care primește doi parametri: vectorul „vector” și lungimea sa, reprezentată de variabila „n”. Funcția verifică dacă lungimea vectorului n este între 1 și 200 (linia 11), dacă elementele vectorului sunt cuprinse între 0 și 1000 (liniile 14, 15) și dacă n este lungimea vectorului „vector” (linia 18). Dacă oricare dintre condiții este încălcată, se va afișa mesajul „Datele nu corespund restricțiilor impuse.” și se va ieși din program cu comanda exit(). Dacă toate condițiile sunt respectate, se va afișa mesajul „Datele sunt introduse corect.” (linia 21) și se va continua programul.
Dacă s-au introdus corect datele, se va apela funcția nr_elem_cu_val_strict_mai_mare_decat_media_aritm(vector, n) care primește ca parametrii vectorul „vector” și dimensiunea sa „n”. Funcția începe prin a calcula suma tuturor elementelor din vector folosind funcția predefinită sum() (linia 4), și o stochează în variabila suma, apoi într-o altă variabilă medie calculează media aritmetică a elementelor din vector împărțind suma calculată anterior la lungimea vectorului (n) și o stochează în variabila medie. Folosind o expresie generator (sum(1 for x in vector if x > medie)), parcurgem vectorul și pentru fiecare element care are o valoare mai mare sau egală cu media aritmetică, adăugăm 1 la valoarea lui C (variabilă denumită conform problemei). Expresia generator calculează efectiv numărul de elemente care satisfac condiția dată, conform problemei, apoi afișează valoarea lui C pe ecran.