0282 - Poz Max
De la Universitas MediaWiki
Sursă: [1]
Cerinţa
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
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
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
- n este un număr natural cu cel mult 9 cifre;
Exemple
Exemplu 1
- pozmax.in
- 8
- 3.5 7 -4 7 2 7 6.3 5
- pozmax.out
- 2 6
Rezolvare
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))
Explicații
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".