1187 - Roboti 1

From Bitnami MediaWiki
Revision as of 19:34, 2 June 2024 by Benzar Ioan (talk | contribs) (Pagină nouă: == Cerința == Într-o fabrică de roboți, aceștia trebuie să îndeplinească o serie de sarcini care au durate diferite. Fiecare robot poate îndeplini o singură sarcină la un moment dat, iar scopul este să se minimizeze timpul total de finalizare a tuturor sarcinilor. Sarcina ta este să implementezi un program care să determine ordinea optimă în care roboții trebuie să îndeplinească sarcinile pentru a minimiza timpul total de finalizare utilizând o metodă gr...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Într-o fabrică de roboți, aceștia trebuie să îndeplinească o serie de sarcini care au durate diferite. Fiecare robot poate îndeplini o singură sarcină la un moment dat, iar scopul este să se minimizeze timpul total de finalizare a tuturor sarcinilor. Sarcina ta este să implementezi un program care să determine ordinea optimă în care roboții trebuie să îndeplinească sarcinile pentru a minimiza timpul total de finalizare utilizând o metodă greedy.

Date de intrare

Programul citește de la tastatură:

Un număr întreg n reprezentând numărul de sarcini. O listă de n numere întregi reprezentând durata fiecărei sarcini.

Date de ieșire

Pe ecran se va afișa timpul total minim de finalizare a tuturor sarcinilor.

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • Durata fiecărei sarcini este un număr întreg pozitiv

Exemplu 1

Intrare

4
3 1 4 3

Iesire

23


Rezolvare

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

   try:
       n = int(input("Introduceți numărul de sarcini (n): "))
       durate = list(map(int, input("Introduceți duratele sarcinilor, separate prin spațiu: ").split()))
       return n, durate
   except ValueError:
       return None, None

def valideaza_date(n, durate):

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

def calculeaza_timp_minim_total(n, durate):

   durate.sort()
   timp_total = 0
   timp_cumulat = 0
   for durata in durate:
       timp_cumulat += durata
       timp_total += timp_cumulat
   return timp_total

def main():

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

if __name__ == "__main__":

   main()

</syntaxhighlight>