0860 - Pachete1
Sursa: [1]
Cerinţa[edit | edit source]
e poarta unei fabrici ies în ordine n pachete fiecare având un volum cunoscut. Pachetele sunt transportate folosind camioane. Toate camioanele au aceeași capacitate C, iar procedura este următoarea: fiecare pachet scos din fabrică este imediat încărcat într-un camion, și nu este posibil ca la încărcare să fie mai mult de un camion.
Determinați numărul minim de camioane necesar pentru a transporta cele n pachete.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n C, iar apoi n numere naturale, reprezentând volumele pachetelor.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele introduse corespund cerintelor.", apoi pe un rand nou programul va afișa pe ecran numărul minim de camioane necesare M. În caz contrar, se va afișa mesajul:" Datele introduse nu corespund cerintelor."
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n ⩽ 1000
- volumele pachetelor și capacitatea camioanelor vor fi mai mici decât 1.000.000.000.
Exemplul 1[edit | edit source]
- Intrare
- Pachete si capacitate: 5 4
- Volume: 2 1 3 1 3
- Ieșire
- Datele introduse corespund cerintelor.
- 3
Exemplul 2[edit | edit source]
- Intrare
- Pachete si capacitate: 0 0
- Volume: 0 0 3 4 5
- Ieșire
- Datele introduse nu corespund cerintelor.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 0860
def count_containers(volumes, C):
volumes.sort(reverse=True) count = 0 current = C for volume in volumes: if volume <= current: current -= volume else: count += 1 current = C - volume if current < C: count += 1 return count
def validate_input(n, C, volumes):
if not (1 <= n <= 1000): print("Datele introduse nu corespund cerintelor.") return False if not all(1 <= v < 1000000000 for v in volumes): print("Datele introduse nu corespund cerintelor.") return False if not (1 <= C < 1000000000): print("Datele introduse nu corespund cerintelor.") return False return True
if __name__ == '__main__':
n, C = map(int, input("Pachete si capacitate: ").split()) volumes = list(map(int, input("Volume: ").split()))
if validate_input(n, C, volumes): print(f"Datele introduse corespund cerintelor.\n{count_containers(volumes, C)}")
</syntaxhighlight>
Explicatie rezolvare[edit | edit source]
Acest program este scris în limbajul de programare Python și este format din două funcții și o secțiune principală de cod.
Funcția `count_containers` primește două argumente: o listă de volume și o capacitate maximă `C`. Scopul funcției este de a determina numărul minim de containere necesare pentru a stoca toate volumele din listă, astfel încât niciun container să nu depășească capacitatea maximă `C`. Funcția sortează lista de volume în ordine descrescătoare și parcurge elementele în ordine, adăugând un nou container ori de câte ori nu mai poate fi adăugat un element la containerul curent.
Funcția `validate_input` primește trei argumente: numărul de pachete, capacitatea maximă a containerelor și o listă de volume. Scopul acestei funcții este de a valida datele de intrare, verificând dacă toate valorile se încadrează în limitele specificate.
În secțiunea principală a codului, utilizatorul este întâmpinat cu un mesaj de intrare și i se cere să introducă numărul de pachete și capacitatea maximă a containerelor. Apoi, utilizatorul este rugat să introducă volumele pachetelor. Datele de intrare sunt validate folosind funcția `validate_input`, iar dacă acestea sunt corecte, funcția `count_containers` este apelată pentru a determina numărul minim de containere necesare și acesta este afișat pe ecran.