0091 - Masini: Difference between revisions

From Bitnami MediaWiki
Gabii (talk | contribs)
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...
Tag: visualeditor
 
Gabii (talk | contribs)
am modificat la ex 2 masiniOUT.txt in loc de consola
Tag: visualeditor
 
(One intermediate revision by the same user not shown)
Line 29: Line 29:
  5 10000
  5 10000
  6 2 4 8 2  
  6 2 4 8 2  
consola
<code>masiniOUT.txt</code>
  Eroare: Nu corespunde restricțiilor   
  Eroare: Nu corespunde restricțiilor   


Line 37: Line 37:


def numar_maxim_masini(n, T, timp_reparare):
def numar_maxim_masini(n, T, timp_reparare):
    # Sortează timpurile de reparare în ordine crescătoare
     timp_reparare.sort()
     timp_reparare.sort()


Line 43: Line 42:
     timp_total = 0
     timp_total = 0


    # Parcurge mașinile și adaugă timpul de reparare la timp_total
     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:
        # Citire n și T
         n, T = map(int, f.readline().split())
         n, T = map(int, f.readline().split())


        # Verificare restricții pentru n și T
         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")


        # Citire și verificare timp_reparare
         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


# Citire date de intrare și verificare restricții
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:
     print(f"Eroare: {str(e)}")
     with open("masiniOUT.txt", "w", encoding="utf-8") as f_out:
        f_out.write(f"Eroare: {str(e)}")
     exit(1)
     exit(1)


# Calculare rezultat
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>

Latest revision as of 10:40, 10 December 2023

Enunț[edit]

Î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[edit]

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[edit]

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[edit]

Pe prima linie a fişierului masiniOUT.txtse 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[edit]

  • 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[edit]

masiniIN.txt

5 10
6 2 4 8 2 

masiniOUT.txt

3

Exemplul 2[edit]

masiniIN.txt

5 10000
6 2 4 8 2 

masiniOUT.txt

Eroare: Nu corespunde restricțiilor   

Rezolvare[edit]

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

  1. Scriere rezultat în fișierul masiniOUT.txt

with open("masiniOUT.txt", "w", encoding="utf-8") as f_out:

   f_out.write(str(rezultat))

</syntaxhighlight>