3786 - Toate: Difference between revisions
Am creat de la zero. |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 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, | ||
Line 5: | Line 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; | ||
Line 26: | Line 27: | ||
; toate.in | ; toate.in | ||
: 5 | : 5 | ||
: 923 926 329 429 3959 | |||
; toate.out | ; toate.out | ||
: 42 | : 42 | ||
Line 35: | Line 36: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
<syntaxhighlight lang="python" line> | <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: | for numar in numere: | ||
exista_valoare_maxima = True | |||
if numar > | if numar > maxim_fara_noua: | ||
maxim_fara_noua = numar | |||
# scriem rezultatul în fișierul toate.out | return maxim_fara_noua, exista_valoare_maxima | ||
with open('toate.out', 'w') as f: | |||
f.write(str(max_fara_noua)) | |||
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> | |||
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> | </syntaxhighlight> |
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>