1187 - Roboti 1
De la Universitas MediaWiki
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
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()