0091 - Masini: Difference between revisions
Pagină nouă: == Enunț == În curtea unui atelier de reparaţii auto, sunt <code>n</code> maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină. = Cerinţa = Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp <code>T</code>. = Date de intrare = Pe prima linie a fişierului <co... |
am modificat sa apara in masiniOUT.txt |
||
Line 37: | Line 37: | ||
def numar_maxim_masini(n, T, timp_reparare): | def numar_maxim_masini(n, T, timp_reparare): | ||
timp_reparare.sort() | timp_reparare.sort() | ||
Line 43: | Line 42: | ||
timp_total = 0 | timp_total = 0 | ||
for timp in timp_reparare: | for timp in timp_reparare: | ||
if timp_total + timp <= T: | if timp_total + timp <= T: | ||
Line 58: | Line 56: | ||
with open(nume_fisier, "r") as f: | with open(nume_fisier, "r") as f: | ||
n, T = map(int, f.readline().split()) | n, T = map(int, f.readline().split()) | ||
if not (1 <= n <= 1000 and 1 <= T <= 1000): | if not (1 <= n <= 1000 and 1 <= T <= 1000): | ||
raise ValueError("Nu corespunde restricțiilor") | raise ValueError("Nu corespunde restricțiilor") | ||
timp_reparare = list(map(int, f.readline().split())) | timp_reparare = list(map(int, f.readline().split())) | ||
if any(timp > 100 for timp in timp_reparare): | if any(timp > 100 for timp in timp_reparare): | ||
Line 72: | Line 67: | ||
return n, T, timp_reparare | return n, T, timp_reparare | ||
try: | try: | ||
n, T, timp_reparare = citeste_date_intrare("masiniIN.txt") | n, T, timp_reparare = citeste_date_intrare("masiniIN.txt") | ||
Line 79: | Line 73: | ||
exit(1) | exit(1) | ||
except ValueError as e: | except ValueError as e: | ||
with open("masiniOUT.txt", "w", encoding="utf-8") as f_out: | |||
f_out.write(f"Eroare: {str(e)}") | |||
exit(1) | exit(1) | ||
rezultat = numar_maxim_masini(n, T, timp_reparare) | rezultat = numar_maxim_masini(n, T, timp_reparare) | ||
# Scriere rezultat în fișierul masiniOUT.txt | # Scriere rezultat în fișierul masiniOUT.txt | ||
with open("masiniOUT.txt", "w") as f_out: | with open("masiniOUT.txt", "w", encoding="utf-8") as f_out: | ||
f_out.write(str(rezultat)) | f_out.write(str(rezultat)) | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 22:29, 9 December 2023
Enunț
În curtea unui atelier de reparaţii auto, sunt n
maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.
Cerinţa
Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp T
.
Date de intrare
Pe prima linie a fişierului masiniIN.txt
se găsesc două numere naturale n
şi T
separate printr-un singur spaţiu, reprezentând numărul de maşini din curtea atelierului auto şi timpul total în care se va lucra.
Pe linia a doua, separate prin câte un spaţiu, se găsesc n
numere naturale t1
, t2
, …, tn
, reprezentând timpii necesari pentru repararea fiecărei maşini.
Date de ieşire
Pe prima linie a fişierului masiniOUT.txt
se va găsi un număr natural k
, reprezentând numărul maxim de maşini care pot fi reparate.
Restricţii şi precizări
1 < n, T <= 1000
- numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu
100
Exemplul 1
masiniIN.txt
5 10 6 2 4 8 2
masiniOUT.txt
3
Exemplul 2
masiniIN.txt
5 10000 6 2 4 8 2
consola
Eroare: Nu corespunde restricțiilor
Rezolvare
<syntaxhighlight lang="python3" line="1"> import os
def numar_maxim_masini(n, T, timp_reparare):
timp_reparare.sort()
masini_reparate = 0 timp_total = 0
for timp in timp_reparare: if timp_total + timp <= T: masini_reparate += 1 timp_total += timp else: break
return masini_reparate
def citeste_date_intrare(nume_fisier):
if not os.path.exists(nume_fisier): raise FileNotFoundError(f"Fișierul {nume_fisier} nu a fost găsit.")
with open(nume_fisier, "r") as f: n, T = map(int, f.readline().split())
if not (1 <= n <= 1000 and 1 <= T <= 1000): raise ValueError("Nu corespunde restricțiilor")
timp_reparare = list(map(int, f.readline().split())) if any(timp > 100 for timp in timp_reparare): raise ValueError("Nu corespunde restricțiilor")
return n, T, timp_reparare
try:
n, T, timp_reparare = citeste_date_intrare("masiniIN.txt")
except FileNotFoundError as e:
print(f"Eroare: {str(e)}") exit(1)
except ValueError as e:
with open("masiniOUT.txt", "w", encoding="utf-8") as f_out: f_out.write(f"Eroare: {str(e)}") exit(1)
rezultat = numar_maxim_masini(n, T, timp_reparare)
- Scriere rezultat în fișierul masiniOUT.txt
with open("masiniOUT.txt", "w", encoding="utf-8") as f_out:
f_out.write(str(rezultat))
</syntaxhighlight>