1519 - Dans

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

De 1 Iunie – Ziua Copilului se organizează un spectacol de dans cu şi pentru copii. Acesta este programat să se desfăşoare în intervalul orar 10.30 -12.00.

În spectacol se înscriu n trupe de dans, iar pentru fiecare trupă se cunoaşte timpul necesar realizării dansului în minute şi numărul de copii din trupa.

Cunoscând n, numărul de trupe înscrise, cele n perechi (t,c) unde t reprezintă timpul în minute şi c numărul de copii din trupa scrieţi un program care:

a) Verifică dacă toate cele n echipe înscrise în spectacol se încadrează în timpul alocat spectacolului şi afişează mesajul NU dacă timpul este mai mare decât cel programat, în caz contrar afişează mesajul DA. b) Calculează cu câte minute este programul incomplet sau depăşit. c) Calculează câţi copii au fost implicaţi în realizarea spectacolului. d) Calculează care este cel mai mare şi cel mai mic timp alocat unui dans.

Date de intrare

Pe prima linie a programul se afla n, numărul de trupe înscrise, iar pe următoarele linii cele n perechi de forma de mai sus.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cerintele de mai sus.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Date de ieșire

Datele conform cerintelor a) – d) se vor afişa în program, răspunsul fiecărei cerinţe fiind scris pe câte o linie. La punctul d) cele 2 valori se vor despărţi prin spaţiu.

Dacă datele sunt introduse corect, programul va rula.

În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

1 ≤ n ≤ 100

5 ≤ t ≤ 15

Exemplul 1

Datele de intrare
Introduceți numărul de trupe:
8
Introduceți timpul și numărul de copii pentru trupa 1 (în această ordine):
10 6
Introduceți timpul și numărul de copii pentru trupa 2 (în această ordine):
8 5
Introduceți timpul și numărul de copii pentru trupa 3 (în această ordine):
9 6
Introduceți timpul și numărul de copii pentru trupa 4 (în această ordine):
12 10
Introduceți timpul și numărul de copii pentru trupa 5 (în această ordine):
10 12
Introduceți timpul și numărul de copii pentru trupa 6 (în această ordine):
5 6
Introduceți timpul și numărul de copii pentru trupa 7 (în această ordine):
7 8
Introduceți timpul și numărul de copii pentru trupa 8 (în această ordine):
9 8
Datele de ieșire
Datele sunt introduse corect.
DA
Programul este incomplet sau depășit cu 20 minute
Numărul total de copii implicați este: 61
Cel mai mare timp alocat unui dans este: 12
Cel mai mic timp alocat unui dans este: 5


Rezolvare

#1519
def read_input(n):
    """
    Citeste datele de intrare pentru cele n trupe si returneaza o lista de tuple (t, c)
    reprezentand timpul si numarul de copii pentru fiecare trupa.
    """
    trupe = []
    for i in range(n):
        t, c = map(int, input(
            f"Introduceți timpul și numărul de copii pentru trupa {i + 1} (în această ordine): ").split())
        trupe.append((t, c))
    return trupe

def compute_statistics(trupe):
    """
    Calculeaza si returneaza timpul total, cel mai mare si cel mai mic timp alocat unui dans si
    numarul total de copii implicati in spectacol.
    """
    total_time = sum(t for t, c in trupe)
    max_time = max(t for t, c in trupe)
    min_time = min(t for t, c in trupe)
    total_kids = sum(c for t, c in trupe)
    return total_time, max_time, min_time, total_kids

def print_statistics(total_time, max_time, min_time, total_kids):
    """
    Afiseaza timpul total, cel mai mare si cel mai mic timp alocat unui dans si numarul total
    de copii implicati in spectacol.
    """
    if total_time > 90:
        print("Datele introduse sunt corecte.")
        print("NU")
    else:
        print("Datele introduse sunt corecte.")
        print("DA")
    minutes_incomplete_or_exceeded = abs(90 - total_time)

    print("Programul este incomplet sau depășit cu {} minute".format(minutes_incomplete_or_exceeded))
    print("Numărul total de copii implicați este:", total_kids)
    print("Cel mai mare timp alocat unui dans este:", max_time)
    print("Cel mai mic timp alocat unui dans este:", min_time)

if __name__ == '__main__':
    n = int(input("Introduceți numărul de trupe: "))
    if not 1 <= n <= 100:
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    trupe = read_input(n)
    total_time, max_time, min_time, total_kids = compute_statistics(trupe)
    print_statistics(total_time, max_time, min_time, total_kids)

Explicatie cod:

Acest cod este împărțit în trei funcții: read_input(n), compute_statistics(trupe) și print_statistics(total_time, max_time, min_time, total_kids).

Funcția read_input(n) primește numărul n de trupe și citește de la tastatură timpul și numărul de copii pentru fiecare trupă, creând o listă de tuple care conține aceste informații pentru fiecare trupă. Această listă este returnată.

Funcția compute_statistics(trupe) primește lista de tuple creată de funcția read_input(n) și calculează timpul total, cel mai mare și cel mai mic timp alocat unui dans și numărul total de copii implicați în spectacol. Aceste informații sunt returnate sub formă de tuple.

Funcția print_statistics(total_time, max_time, min_time, total_kids) primește informațiile calculate de funcția compute_statistics(trupe) și le afișează în formatul specificat, împreună cu un răspuns "DA" sau "NU" în funcție de faptul că timpul total este mai mic sau mai mare decât 90 de minute.

În programul principal, utilizatorul este întâi întrebat să introducă numărul de trupe. Apoi, se apelează funcția read_input(n) pentru a citi informațiile pentru fiecare trupă și a crea lista de tuple corespunzătoare. Această listă este apoi pasată funcției compute_statistics(trupe), care calculează informațiile necesare și le returnează sub formă de tuple. Această tuplă este apoi pasată funcției print_statistics(total_time, max_time, min_time, total_kids), care afișează informațiile în formatul specificat.