3285 - Mos Craciun

De la Universitas MediaWiki

Sursă: [1]

Cerință

Cei n copii de la grădiniță stau cuminți în șir și așteaptă cadourile de la Moș Crăciun. Ei sunt numerotați de la 1 la n (se consideră că n este par) și în prima jumătate sunt copiii de la grupa mare iar în a doua jumătate sunt cei de la grupa mică (numărul de copii din fiecare grupă este același, n/2). După ce trece Moș Crăciun se știe câte cadouri a primit fiecare copil și noi dorim să aflăm câți copii din grupa mică au primit mai multe cadouri decât orice copil din grupa mare.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, reprezentând, în ordine, numărul de cadouri ale fiecărui copil.

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, valoarea cerută. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 2 ≤ n ≤ 20, par
  • cele n numere citite vor fi naturale nenule mai mici decât 1.000.000.000

Exemple

Exemplu 1

Intrare
6
1 6 3 6 8 2
Ieșire
1

Exemplu 2

Intrare
1
1 5 3 8
Ieșire
Datele nu sunt comform restricțiilor impuse

Exemplu 3

Intrare
21
1 6 3 6 8 2 5 6 2 3 4 2 1 5 3 2 1 5 3 6 4
Ieșire
Datele nu sunt comform restricțiilor impuse

Rezolvare

def citeste_n():
    while True:
        try:
            n = int(input("Introduceti numarul de valori: "))
            if n >= 2 and n <= 20:
                print("Datele sunt corecte.")
                return n
            else:
                print("Datele nu sunt conform restricțiilor impuse.")
        except ValueError:
            print("Trebuie introduse doar numere intregi.")


def citeste_valori(n):
    valori = []
    for i in range(n):
        while True:
            try:
                valoare = int(input("Introduceti o valoare: "))
                if valoare <= 1000000000:
                    print("Datele sunt corecte.")
                    valori.append(valoare)
                    break
                else:
                    print("Datele nu sunt conform restricțiilor impuse.")
            except ValueError:
                print("Trebuie introduse doar valori numerice.")
    return valori


def cadouri(valori):
    maxi = 0
    k = 0
    for i in range(1, len(valori) // 2 + 1):
        if valori[i - 1] > maxi:
            maxi = valori[i - 1]

    for i in range(len(valori) // 2 + 1, len(valori) + 1):
        if valori[i - 1] > maxi:
            k += 1
    return k


if __name__ == '__main__':
    n = citeste_n()
    valori = citeste_valori(n)
    k = cadouri(valori)
    print("Numarul de copii este:", k)

Explicații

citeste_n(): Această funcție citește de la tastatură numărul de valori pe care utilizatorul dorește să le introducă și verifică dacă acestea respectă restricțiile impuse (între 2 și 20). În caz contrar, utilizatorul este notificat că datele nu sunt conform restricțiilor și i se cere să introducă din nou un număr corect.
citeste_valori(n): Această funcție primește ca parametru numărul de valori introduse de utilizator și citește aceste valori de la tastatură, verificând dacă acestea sunt valori numerice și respectă restricțiile impuse (mai mici sau egale cu 1 miliard). În caz contrar, utilizatorul este notificat că datele nu sunt conform restricțiilor și i se cere să introducă din nou valori corecte.
cadouri(valori): Această funcție primește ca parametru lista de valori introduse de utilizator și calculează numărul de copii care vor primi cadouri în funcție de restricția dată: copiii vor primi cadouri de la jumătatea listei în sus numai dacă valoarea cadoului este mai mare decât orice valoare anterioară. Dacă valoarea maximă se găsește în prima jumătate a listei, atunci niciun copil nu va primi cadouri. Funcția returnează numărul de copii care primesc cadouri.
În funcția cadouri(valori), prima buclă for calculează valoarea maximă din prima jumătate a listei, iar cea de-a doua buclă for numără câți copii primesc cadouri în a doua jumătate a listei. Funcția returnează valoarea acestui număr, care este apoi afișată pe ecran în funcția main().