3786 - Toate: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
Line 39: Line 39:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


def eliminate_digit_9(numar):
def elimina_cifra_9(numar):
     numar_fara_noua = int(str(numar).replace('9', ''))
     numar_fara_noua = int(str(numar).replace('9', ''))
     return numar_fara_noua
     return numar_fara_noua




def find_max_without_9(numere):
def gaseste_maxim_fara_9(numere):
     max_fara_noua = -1
     maxim_fara_noua = -1
     exista_valoare_maxima = False
     exista_valoare_maxima = False


     for numar in numere:
     for numar in numere:
         exista_valoare_maxima = True
         exista_valoare_maxima = True
         if numar > max_fara_noua:
         if numar > maxim_fara_noua:
             max_fara_noua = numar
             maxim_fara_noua = numar


     return max_fara_noua, exista_valoare_maxima
     return maxim_fara_noua, exista_valoare_maxima




Line 75: Line 75:
                     numar = int(numar)
                     numar = int(numar)
                     if numar <= 0 or numar > 999999999:
                     if numar <= 0 or numar > 999999999:
                         print("Eroare: Numărul trebuie să fie un întreg pozitiv cu cel mult 9 cifre. Valoarea va fi ignorata.")
                         print("Eroare: Numărul trebuie să fie un întreg pozitiv cu cel mult 9 cifre.")
                     else:
                     else:
                         numere.append(numar)
                         numere.append(numar)
Line 82: Line 82:


             # eliminăm cifra 9 din numerele care o conțin
             # eliminăm cifra 9 din numerele care o conțin
             numere_modificate = [eliminate_digit_9(numar) for numar in numere]
             numere_modificate = [elimina_cifra_9(numar) for numar in numere]


             # găsim numărul maxim din numerele modificate
             # găsim numărul maxim din numerele modificate
             max_fara_noua, exista_valoare_maxima = find_max_without_9(numere_modificate)
             maxim_fara_noua, exista_valoare_maxima = gaseste_maxim_fara_9(numere_modificate)


             # scriem rezultatul în fișierul toate.out
             # scriem rezultatul în fișierul toate.out
             with open('toate.out', 'w') as f:
             with open('toate.out', 'w') as f:
                 if exista_valoare_maxima:
                 if exista_valoare_maxima:
                     f.write(str(max_fara_noua))
                     f.write(str(maxim_fara_noua))
                     print("Valoarea cautată este afișată în fișierul toate.out.")
                     print("Valoarea cautată este afișată în fișierul toate.out.")
                 else:
                 else:

Latest revision as of 20:43, 15 May 2023

sursa: [1]

= Cerinţa[edit | edit source]

De n numere sunt date, Şi cifra nouă e-n toate, Află ce număr devine Maxim făr’de nouă-n sine?

= Notă[edit | edit source]

Vreme trece, vreme vine, Toate-s vechi şi nouă toate; Ce e rău şi ce e bine Tu te-ntreabă şi socoate;

(Mihai Eminescu, Glossă)

Date de intrare[edit | edit source]

Fișierul de intrare toate.in conține pe prima linie un număr n, iar pe urmatoarele linii cele n numere naturale.

Date de ieşire[edit | edit source]

Fișierul de ieșire toate.out va conține pe prima linie numărul maxim cerut.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 100.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000

Exemplu[edit | edit source]

toate.in
5
923 926 329 429 3959
toate.out
42

Explicatie[edit | edit source]

Numărul maxim cerut este 42.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def elimina_cifra_9(numar):

   numar_fara_noua = int(str(numar).replace('9', ))
   return numar_fara_noua


def gaseste_maxim_fara_9(numere):

   maxim_fara_noua = -1
   exista_valoare_maxima = False
   for numar in numere:
       exista_valoare_maxima = True
       if numar > maxim_fara_noua:
           maxim_fara_noua = numar
   return maxim_fara_noua, exista_valoare_maxima


def main():

   try:
       with open('toate.in', 'r') as f:
           # citim numărul de numere din fișier
           try:
               n = int(f.readline().strip())
               if n <= 0:
                   print("Eroare: Numărul de numere trebuie să fie un întreg pozitiv.")
           except ValueError:
               print("Eroare: Numărul de numere trebuie să fie un număr întreg.")
               n = 0
           # citim numerele din fișier și le stocăm într-o listă
           numere = []
           for i in range(n):
               numar = f.readline().strip()
               try:
                   numar = int(numar)
                   if numar <= 0 or numar > 999999999:
                       print("Eroare: Numărul trebuie să fie un întreg pozitiv cu cel mult 9 cifre.")
                   else:
                       numere.append(numar)
               except ValueError:
                   print("Eroare: Datele de intrare trebuie să fie numere întregi.")
           # eliminăm cifra 9 din numerele care o conțin
           numere_modificate = [elimina_cifra_9(numar) for numar in numere]
           # găsim numărul maxim din numerele modificate
           maxim_fara_noua, exista_valoare_maxima = gaseste_maxim_fara_9(numere_modificate)
           # scriem rezultatul în fișierul toate.out
           with open('toate.out', 'w') as f:
               if exista_valoare_maxima:
                   f.write(str(maxim_fara_noua))
                   print("Valoarea cautată este afișată în fișierul toate.out.")
               else:
                   f.write("Nu există nicio valoare maximă fără cifra 9 în fișier.")
   except FileNotFoundError:
       print("Eroare: Fișierul de intrare nu există.")


if __name__ == "__main__":

   main()

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

try:

   with open('toate.in', 'r') as f:
       # citim numărul de numere din fișier
       try:
           n = int(f.readline().strip())
           if n <= 0:
               print("Eroare: Numărul de numere trebuie să fie un întreg pozitiv.")
       except ValueError:
           print("Eroare: Numărul de numere trebuie să fie un număr întreg.")
           n = 0
       # citim numerele din fișier și le stocăm într-o listă
       numere = []
       for i in range(n):
           numar = f.readline().strip()
           try:
               numar = int(numar)
               if numar <= 0 or numar > 999999999:
                   print("Eroare: Numărul trebuie să fie un întreg pozitiv cu cel mult 9 cifre.")
               else:
                   # eliminăm complet cifra 9 din numerele care o conțin
                   numar_fara_noua = int(str(numar).replace('9', ))
                   numere.append(numar_fara_noua)
           except ValueError:
               print("Eroare: Datele de intrare trebuie să fie numere întregi.")
       # găsim numărul maxim din numerele modificate
       max_fara_noua = -1
       exista_valoare_maxima = False
       for numar in numere:
           exista_valoare_maxima = True
           if numar > max_fara_noua:
               max_fara_noua = numar
       # scriem rezultatul în fișierul toate.out
       with open('toate.out', 'w') as f:
           if exista_valoare_maxima:
               f.write(str(max_fara_noua))
               print("Valoarea cautată este afișată în fișierul toate.out.")
           else:
               f.write("Nu există nicio valoare maximă fără cifra 9 în fișier.")

except FileNotFoundError:

   print("Eroare: Fișierul de intrare nu există.")

</syntaxhighlight>