0282 - Poz Max
Sursă: [1]
Cerinţa[edit | edit source]
Se dă un şir cu n elemente, numere reale, numerotate de la 1 la n. Determinaţi numărul de ordine al primei şi al ultimei apariţii a valorii maxime din şir.
Date de intrare[edit | edit source]
Fişierul de intrare pozmax.in conţine pe prima linie numărul n; urmează n numere reale, dispuse pe mai multe linii şi separate prin spaţii.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Fişierul de ieşire pozmax.out va conţine pe prima linie două numere p şi u, reprezentând valorile cerute. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- n este un număr natural cu cel mult 9 cifre;
Exemple[edit | edit source]
Exemplu 1[edit | edit source]
- pozmax.in
- 8
- 3.5 7 -4 7 2 7 6.3 5
- pozmax.out
- 2 6
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def citeste_n():
while True: try: with open("pozmax.in", "r") as fin: n = int(fin.readline()) if n >= 1 and n <= 1000000000: print("Datele sunt corecte.") return n else: print("Datele nu sunt conform restricțiilor impuse.") exit() except ValueError: print("Trebuie introduse doar numere intregi.") exit()
def citeste_valori(n):
valori = [] with open("pozmax.in", "r") as fin: fin.readline() for i in range(n): linie = fin.readline().strip().split() while len(linie) != n: linie += fin.readline().strip().split() try: for j in range(n): if float(linie[j]) <= 10**9: valori.append(float(linie[j])) else: print("Datele nu sunt conform restricțiilor impuse.") exit() except ValueError: print("Trebuie introduse doar numere reale.") exit() return valori
def pozitii_max(valori):
max_val = max(valori) p = valori.index(max_val) + 1 u = len(valori) - valori[::-1].index(max_val) return p, u
if _name_ == '_main_':
n = citeste_n() valori = citeste_valori(n) p, u = pozitii_max(valori) with open("pozmax.out", 'w') as f: f.write(str(p) + " " + str(u))
</syntaxhighlight>
Explicații[edit | edit source]
Acest cod implementează o soluție pentru problema de găsire a pozițiilor primei și ultimei apariții a valorii maxime dintr-un șir de numere reale.
Funcția citeste_n() este folosită pentru a citi valoarea n din fișierul de intrare "pozmax.in" și verifică dacă se încadrează în restricțiile impuse (între 1 și 1 miliard).
Funcția citeste_valori(n) este utilizată pentru a citi șirul de n numere reale din fișierul de intrare "pozmax.in". Aceasta verifică dacă numerele sunt conforme cu restricțiile impuse (valori între -1 miliard și 1 miliard) și, în caz contrar, iese din program cu un mesaj de eroare.
Funcția pozitii_max(valori) primește șirul de numere reale și găsește valoarea maximă din șir folosind funcția max(). Folosind metoda index(), aceasta determină poziția primei apariții a valorii maxime și adaugă 1 pentru a obține poziția în numerotare de la 1. De asemenea, calculează poziția ultimei apariții a valorii maxime folosind metoda index() combinată cu o inversare a șirului și adaugă lungimea șirului pentru a obține poziția în numerotare de la 1.
În funcția main(), se apelează cele trei funcții pentru a citi datele de intrare, a determina pozițiile valorii maxime și a scrie rezultatul în fișierul de ieșire "pozmax.out".