3739 - Cafea

From Bitnami MediaWiki
Revision as of 18:57, 2 June 2024 by Benzar Ioan (talk | contribs) (Pagină nouă: == Cerința == Într-o cafenea, un barista trebuie să pregătească diverse tipuri de cafea pentru clienți. Fiecare comandă de cafea are un anumit timp de preparare, iar barista dorește să minimizeze timpul total de așteptare al clienților. Sarcina ta este să implementezi un program care să determine ordinea optimă în care barista trebuie să prepare comenzile pentru a minimiza timpul total de așteptare utilizând o metodă greedy. == Date de intrare == Programul...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Într-o cafenea, un barista trebuie să pregătească diverse tipuri de cafea pentru clienți. Fiecare comandă de cafea are un anumit timp de preparare, iar barista dorește să minimizeze timpul total de așteptare al clienților. Sarcina ta este să implementezi un program care să determine ordinea optimă în care barista trebuie să prepare comenzile pentru a minimiza timpul total de așteptare utilizând o metodă greedy.

Date de intrare

Programul citește de la tastatură:

Un număr întreg n reprezentând numărul de comenzi. O listă de n numere întregi reprezentând timpul de preparare pentru fiecare comandă.

Date de ieșire

Pe ecran se va afișa timpul total minim de așteptare al clienților.

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • Timpul de preparare pentru fiecare comandă este un număr întreg pozitiv

Exemplu 1

Intrare

4
3 1 4 3

Iesire

23

Exemplu 2

Intrare

3
2 5 1

Iesire

12

Rezolvare

<syntaxhighlight lang="python" line> def citeste_date():

   try:
       n = int(input("Introduceți numărul de comenzi (n): "))
       timpuri = list(map(int, input("Introduceți timpii de preparare, separați prin spațiu: ").split()))
       return n, timpuri
   except ValueError:
       return None, None

def valideaza_date(n, timpuri):

   if not (1 <= n <= 100):
       return False
   if len(timpuri) != n:
       return False
   if not all(isinstance(timp, int) and timp > 0 for timp in timpuri):
       return False
   return True

def calculeaza_timp_minim_asteptare(n, timpuri):

   timpuri.sort()
   timp_asteptare_total = 0
   timp_cumulat = 0
   for timp in timpuri:
       timp_cumulat += timp
       timp_asteptare_total += timp_cumulat
   return timp_asteptare_total

def main():

   n, timpuri = citeste_date()
   
   if n is None or timpuri is None or not valideaza_date(n, timpuri):
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return
   
   print("Datele de intrare corespund restricțiilor impuse.")
   timp_minim_asteptare = calculeaza_timp_minim_asteptare(n, timpuri)
   print(timp_minim_asteptare)

if __name__ == "__main__":

   main()

</syntaxhighlight>