1187 - Roboti 1

De la Universitas MediaWiki
Versiunea din 2 iunie 2024 19:34, autor: Benzar Ioan (discuție | contribuții) (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...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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()