3786 - Toate: Diferență între versiuni

De la Universitas MediaWiki
mFără descriere a modificării
 
(Nu s-au afișat 2 versiuni intermediare efectuate de același utilizator)
Linia 1: Linia 1:
== Cerinţa ==
sursa: [https://www.pbinfo.ro/probleme/3786/toate]
=== Cerinţa ==
De n numere sunt date,
De n numere sunt date,
Şi cifra nouă e-n toate,
Şi cifra nouă e-n toate,
Linia 5: Linia 6:
Maxim făr’de nouă-n sine?
Maxim făr’de nouă-n sine?


== Notă ==  
== Notă =  
Vreme trece, vreme vine,
Vreme trece, vreme vine,
Toate-s vechi şi nouă toate;
Toate-s vechi şi nouă toate;
Linia 35: Linia 36:
== Rezolvare ==
== Rezolvare ==


=== Rezolvare ver. 1 ===
<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 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


# deschidem fisierul pentru citire
try:
try:
     with open('toate.in', 'r') as f:
     with open('toate.in', 'r') as f:
Linia 58: Linia 127:
                     print("Eroare: Numărul trebuie să fie un întreg pozitiv cu cel mult 9 cifre.")
                     print("Eroare: Numărul trebuie să fie un întreg pozitiv cu cel mult 9 cifre.")
                 else:
                 else:
                     numere.append(numar)
                    # 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:
             except ValueError:
                 print("Eroare: Datele de intrare trebuie să fie numere întregi.")
                 print("Eroare: Datele de intrare trebuie să fie numere întregi.")


         # găsim numărul maxim fără cifrele 9
         # găsim numărul maxim din numerele modificate
         max_fara_noua = 0
         max_fara_noua = -1
         exista_valoare_maxima = False
         exista_valoare_maxima = False


         for numar in numere:
         for numar in numere:
            if '9' in str(numar):
                continue
             exista_valoare_maxima = True
             exista_valoare_maxima = True
             if numar > max_fara_noua:
             if numar > max_fara_noua:
Linia 77: Linia 146:
             if exista_valoare_maxima:
             if exista_valoare_maxima:
                 f.write(str(max_fara_noua))
                 f.write(str(max_fara_noua))
                 print("Valoarea cautata este afisata in fisierul toate.out.")
                 print("Valoarea cautată este afișată în fișierul toate.out.")
             else:
             else:
                 f.write("Nu există nicio valoare maximă fără cifrele 9 în fișier.")
                 f.write("Nu există nicio valoare maximă fără cifra 9 în fișier.")
 
except FileNotFoundError:
except FileNotFoundError:
     print("Eroare: Fișierul de intrare nu există.")
     print("Eroare: Fișierul de intrare nu există.")


</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 15 mai 2023 20:43

sursa: [1]

= Cerinţa

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

= Notă

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

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

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

Restricții și precizări

  • 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

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

Explicatie

Numărul maxim cerut este 42.

Rezolvare

Rezolvare ver. 1

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

Rezolvare ver. 2

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ă.")