0860 - Pachete1: Difference between revisions
Dragos1234 (talk | contribs) No edit summary |
Dragos1234 (talk | contribs) |
||
Line 51: | Line 51: | ||
def validate_input(n, C, volumes): | def validate_input(n, C, volumes): | ||
if not (1 <= n <= 1000): | if not (1 <= n <= 1000): | ||
print(" | print("Datele introduse nu corespund cerintelor.") | ||
return False | return False | ||
if not all(1 <= v < 1000000000 for v in volumes): | if not all(1 <= v < 1000000000 for v in volumes): | ||
print(" | print("Datele introduse nu corespund cerintelor.") | ||
return False | return False | ||
if not (1 <= C < 1000000000): | if not (1 <= C < 1000000000): | ||
print(" | print("Datele introduse nu corespund cerintelor.") | ||
return False | return False | ||
return True | return True | ||
Line 67: | Line 67: | ||
if validate_input(n, C, volumes): | if validate_input(n, C, volumes): | ||
print(count_containers(volumes, C)) | print(f"Datele introduse corespund cerintelor.\n{count_containers(volumes, C)}") | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie rezolvare== | ==Explicatie rezolvare== |
Revision as of 17:35, 26 April 2023
Sursa: [1]
Cerinţa
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
Programul citește de la tastatură numerele n C, iar apoi n numere naturale, reprezentând volumele pachetelor.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa valoarea cerută. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse.
Restricţii şi precizări
- 1 ⩽ n ⩽ 1000
- volumele pachetelor și capacitatea camioanelor vor fi mai mici decât 1.000.000.000.
Exemplul 1
- Intrare
- Pachete si capacitate: 5 4
- Volume: 2 1 3 1 3
- Ieșire
- 3
Exemplul 2
- Intrare
- Pachete si capacitate: 0 0
- Volume: 0 0 3 4 5
- Ieșire
- Numărul de pachete trebuie să fie între 1 și 1000.
Rezolvare
<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>