0959 - secmax: Difference between revisions
No edit summary |
No edit summary |
||
Line 26: | Line 26: | ||
: 12543644 | : 12543644 | ||
; Ieșire | ; Ieșire | ||
: Datele sunt introduse correct. | |||
: secmax.out | : secmax.out | ||
: 5 | : 5 | ||
Line 36: | Line 36: | ||
: 0 2 123458 | : 0 2 123458 | ||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse. | : Datele nu corespund restricțiilor impuse. | ||
Line 45: | Line 44: | ||
# 0959 - secmax | # 0959 - secmax | ||
def | def calculate_total_sequences(n, digits): | ||
if n < 3: | |||
return 0 | |||
count = 0 | |||
for i in range(n - 2): | |||
if digits[i] < digits[i + 1] > digits[i + 2]: | |||
count += 1 | |||
def | return count | ||
n | |||
def validate_input(n, digits): | |||
if n < 8 or n > 25000: | |||
return False | |||
if any(digit < 0 or digit > 9 for digit in digits): | |||
return False | |||
if digits[0] == 0: | |||
return False | |||
return | return True | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
with open("secmax.in", "r") as file: | |||
n = int(file.readline()) | |||
with open("secmax. | digits = list(map(int, file.readline().split())) | ||
if validate_input(n, digits): | |||
print("Datele sunt introduse corect.") | print("Datele sunt introduse corect.") | ||
result = calculate_total_sequences(n, digits) | |||
with open("secmax.out", "w") as file: | |||
file.write(str(result)) | |||
else: | |||
print("Datele nu corespund restricțiilor impuse.") | print("Datele nu corespund restricțiilor impuse.") | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicatie Rezolvare == | == Explicatie Rezolvare == | ||
Sunt definite două funcții: | |||
calculate_total_sequences(n, digits): Aceasta primește numărul n de cifre și lista digits care conține cifrele numărului X. Verifică dacă numărul de cifre este mai mic de 3 și, în caz afirmativ, returnează 0. În caz contrar, parcurge lista de cifre și numără secvențele-maxim. | |||
validate_input(n, digits): Aceasta validează datele de intrare. Verifică dacă numărul n se încadrează în intervalul specificat și dacă prima cifră din lista digits este diferită de 0. | |||
În blocul if __name__ == "__main__": se | În blocul if __name__ == "__main__": se citesc datele de intrare din fișierul "secmax.in". Se validează datele folosind funcția validate_input. Dacă datele sunt corecte, se calculează numărul total de secvențe-maxim utilizând funcția calculate_total_sequences. Rezultatul este scris în fișierul "secmax.out". În caz contrar, se afișează un mesaj corespunzător. |
Revision as of 21:52, 14 May 2023
Sursa: 0959 - secmax
Cerinţa
Scrieți un program care citește numărul N, cele N cifre ale numărului X și care determină numărul total de secvenţe-maxim din numărul X.
Date de intrare
Fișierul de intrare secmax.in conține pe prima linie numărul natural N. Pe următoarea linie se află o succesiune de N cifre X1X2...XN, reprezentând cifrele numărului X.
Date de ieșire
Fișierul de ieșire secmax.out va conține: Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou pe prima linie un număr natural, reprezentând numărul total de secvenţe-maxim din numărul X, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări
- 8 ≤ N ≤ 25000
- 0 ≤ X1, X2 , ..., XN ≤ 9
- X1 ≠ 0
- o secvență-maxim este formată din cel puțin trei cifre
Exemplu 1
- Intrare
- secmax.in
- 8
- 12543644
- Ieșire
- Datele sunt introduse correct.
- secmax.out
- 5
Exemplu 2
- Intrare
- secmax.in
- -9
- 0 2 123458
- Ieșire
- Datele nu corespund restricțiilor impuse.
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 0959 - secmax
def calculate_total_sequences(n, digits):
if n < 3: return 0
count = 0 for i in range(n - 2): if digits[i] < digits[i + 1] > digits[i + 2]: count += 1
return count
def validate_input(n, digits):
if n < 8 or n > 25000: return False
if any(digit < 0 or digit > 9 for digit in digits): return False
if digits[0] == 0: return False
return True
if __name__ == "__main__":
with open("secmax.in", "r") as file: n = int(file.readline()) digits = list(map(int, file.readline().split()))
if validate_input(n, digits): print("Datele sunt introduse corect.") result = calculate_total_sequences(n, digits) with open("secmax.out", "w") as file: file.write(str(result)) else: print("Datele nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicatie Rezolvare
Sunt definite două funcții:
calculate_total_sequences(n, digits): Aceasta primește numărul n de cifre și lista digits care conține cifrele numărului X. Verifică dacă numărul de cifre este mai mic de 3 și, în caz afirmativ, returnează 0. În caz contrar, parcurge lista de cifre și numără secvențele-maxim.
validate_input(n, digits): Aceasta validează datele de intrare. Verifică dacă numărul n se încadrează în intervalul specificat și dacă prima cifră din lista digits este diferită de 0.
În blocul if __name__ == "__main__": se citesc datele de intrare din fișierul "secmax.in". Se validează datele folosind funcția validate_input. Dacă datele sunt corecte, se calculează numărul total de secvențe-maxim utilizând funcția calculate_total_sequences. Rezultatul este scris în fișierul "secmax.out". În caz contrar, se afișează un mesaj corespunzător.