1754 - Munți: Difference between revisions
Dragos1234 (talk | contribs) |
Dragos1234 (talk | contribs) |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 7: | Line 7: | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse corespund cerintelor.", apoi fișierul de ieșire munti.out va conține, pe prima și singura linie a fișierului, numărul maxim de munți ce pot fi aduși la o înălțime egală. În cazul în care datele nu respectă restricțiile, se va doar afișa pe ecran: "Datele introduse nu corespund cerintelor." | |||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
Line 26: | Line 26: | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; Intrare | ; Intrare | ||
: munti.in | : ''munti.in'' | ||
: 8 | : 8 | ||
: 2 6 2 2 | : 2 6 2 2 | ||
Line 38: | Line 38: | ||
#1754 | #1754 | ||
def validate_input(n, x_list): | def validate_input(n, x_list): | ||
if not 1 <= n <= 1000000 or not all(1 <= x <= 1000000000 for x in x_list): | |||
if not 1 <= n <= 1000000 | |||
print("Datele introduse nu corespund cerintelor.") | print("Datele introduse nu corespund cerintelor.") | ||
exit() | exit() | ||
def read_input_file(file_path): | |||
with open( | with open(file_path, "r") as f_in: | ||
n = int(f_in.readline()) | n = int(f_in.readline()) | ||
x_list = list(map(int, f_in.readline().split())) | x_list = list(map(int, f_in.readline().split())) | ||
return n, x_list | |||
def write_output_file(file_path, result): | |||
with open(file_path, "w") as f_out: | |||
f_out.write(str(result)) | |||
def calculate_result(n, x_list): | |||
s = sum(x_list) | |||
return n if s % n == 0 else n - 1 | |||
if __name__ == "__main__": | |||
input_file = "munti.in" | |||
output_file = "munti.out" | |||
try: | |||
n, x_list = read_input_file(input_file) | |||
validate_input(n, x_list) | validate_input(n, x_list) | ||
result = calculate_result(n, x_list) | |||
write_output_file(output_file, result) | |||
print("Datele introduse corespund cerintelor.") | |||
except ValueError as e: | |||
print(str(e)) | |||
except FileNotFoundError: | |||
print("Fisierul de intrare nu exista.") | |||
except Exception as e: | |||
print("A aparut o eroare: " + str(e)) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicatie rezolvare == | == Explicatie rezolvare == | ||
Acest program | Acest program are ca scop citirea unui fișier de intrare, validarea datelor, efectuarea unui calcul și scrierea rezultatului într-un fișier de ieșire. | ||
n | Funcția `validate_input` primește doi parametri: `n` și `x_list`. Această funcție verifică dacă `n` este între 1 și 1.000.000 și dacă toate elementele din `x_list` sunt între 1 și 1.000.000.000. Dacă această validare nu este îndeplinită, se afișează un mesaj de eroare și programul se încheie. | ||
Funcția | Funcția `read_input_file` primește calea către un fișier de intrare și returnează două valori: `n` și `x_list`. Ea deschide fișierul de intrare și citește prima linie, care reprezintă `n`. Apoi citește a doua linie și o împarte în elemente întregi, pe care le stochează într-o listă `x_list`. Cele două valori sunt returnate ca rezultat. | ||
Funcția `write_output_file` primește calea către un fișier de ieșire și un rezultat. Ea deschide fișierul de ieșire și scrie rezultatul convertit la șir de caractere. | |||
În | Funcția `calculate_result` primește `n` și `x_list` și efectuează un calcul pentru a obține rezultatul. Calculează suma tuturor elementelor din `x_list` și verifică dacă această sumă este divizibilă cu `n`. Dacă este, rezultatul este egal cu `n`, altfel rezultatul este egal cu `n - 1`. Rezultatul calculat este returnat. | ||
În cadrul blocului `if __name__ == "__main__":`, se specifică fișierul de intrare și fișierul de ieșire. Se încearcă citirea datelor din fișierul de intrare folosind `read_input_file`, validarea datelor cu `validate_input`, calcularea rezultatului cu `calculate_result`, scrierea rezultatului în fișierul de ieșire folosind `write_output_file`, și se afișează un mesaj de confirmare dacă totul a fost realizat cu succes. | |||
Dacă apar excepții în timpul execuției (cum ar fi valori invalide în fișierul de intrare sau fișierul de intrare lipsă), se afișează un mesaj corespunzător. |
Latest revision as of 21:30, 14 May 2023
Sursa: [1]
Cerinţa[edit | edit source]
Vrăjitorul vă cere să determinați numărul maxim de munți ce pot fi aduși la o înălțime egală.
Date de intrare[edit | edit source]
Pe prima linie a fișierului munti.in se va afla numărul natural N, reprezentând numărul de munți existenți. Pe cea de-a doua linie se vor afla N valori naturale separate prin spațiu, reprezentând înălțimea inițială a fiecărui munte.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse corespund cerintelor.", apoi fișierul de ieșire munti.out va conține, pe prima și singura linie a fișierului, numărul maxim de munți ce pot fi aduși la o înălțime egală. În cazul în care datele nu respectă restricțiile, se va doar afișa pe ecran: "Datele introduse nu corespund cerintelor."
Restricţii şi precizări[edit | edit source]
- 1 ⩽ N ⩽ 1.000.000
- 1 ⩽ înalțimea inițială ⩽ 1.000.000.000
Exemplul 1[edit | edit source]
- Intrare
- munti.in
- 4
- 2 6 2 2
- Ieșire
- Datele introduse corespund cerintelor.
- munti.out
- 4
Exemplul 2[edit | edit source]
- Intrare
- munti.in
- 8
- 2 6 2 2
- Ieșire
- Datele introduse corespund cerintelor.
- munti.out
- 7
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1754
def validate_input(n, x_list):
if not 1 <= n <= 1000000 or not all(1 <= x <= 1000000000 for x in x_list): print("Datele introduse nu corespund cerintelor.") exit()
def read_input_file(file_path):
with open(file_path, "r") as f_in: n = int(f_in.readline()) x_list = list(map(int, f_in.readline().split())) return n, x_list
def write_output_file(file_path, result):
with open(file_path, "w") as f_out: f_out.write(str(result))
def calculate_result(n, x_list):
s = sum(x_list) return n if s % n == 0 else n - 1
if __name__ == "__main__":
input_file = "munti.in" output_file = "munti.out"
try: n, x_list = read_input_file(input_file) validate_input(n, x_list) result = calculate_result(n, x_list) write_output_file(output_file, result) print("Datele introduse corespund cerintelor.") except ValueError as e: print(str(e)) except FileNotFoundError: print("Fisierul de intrare nu exista.") except Exception as e: print("A aparut o eroare: " + str(e))
</syntaxhighlight>
Explicatie rezolvare[edit | edit source]
Acest program are ca scop citirea unui fișier de intrare, validarea datelor, efectuarea unui calcul și scrierea rezultatului într-un fișier de ieșire.
Funcția `validate_input` primește doi parametri: `n` și `x_list`. Această funcție verifică dacă `n` este între 1 și 1.000.000 și dacă toate elementele din `x_list` sunt între 1 și 1.000.000.000. Dacă această validare nu este îndeplinită, se afișează un mesaj de eroare și programul se încheie.
Funcția `read_input_file` primește calea către un fișier de intrare și returnează două valori: `n` și `x_list`. Ea deschide fișierul de intrare și citește prima linie, care reprezintă `n`. Apoi citește a doua linie și o împarte în elemente întregi, pe care le stochează într-o listă `x_list`. Cele două valori sunt returnate ca rezultat.
Funcția `write_output_file` primește calea către un fișier de ieșire și un rezultat. Ea deschide fișierul de ieșire și scrie rezultatul convertit la șir de caractere.
Funcția `calculate_result` primește `n` și `x_list` și efectuează un calcul pentru a obține rezultatul. Calculează suma tuturor elementelor din `x_list` și verifică dacă această sumă este divizibilă cu `n`. Dacă este, rezultatul este egal cu `n`, altfel rezultatul este egal cu `n - 1`. Rezultatul calculat este returnat.
În cadrul blocului `if __name__ == "__main__":`, se specifică fișierul de intrare și fișierul de ieșire. Se încearcă citirea datelor din fișierul de intrare folosind `read_input_file`, validarea datelor cu `validate_input`, calcularea rezultatului cu `calculate_result`, scrierea rezultatului în fișierul de ieșire folosind `write_output_file`, și se afișează un mesaj de confirmare dacă totul a fost realizat cu succes.
Dacă apar excepții în timpul execuției (cum ar fi valori invalide în fișierul de intrare sau fișierul de intrare lipsă), se afișează un mesaj corespunzător.