3786 - Toate

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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