0249 - PozitieX
Cerinţa
Se dă un număr natural X şi un şir cu n numere naturale distincte două câte două. Să se determine poziţia pe care s-ar afla numărul X în şirul ordonat crescător.
Date de intrare
Fişierul de intrare pozitiex.in conţine pe prima linie numerele X şi n. Urmează n numere naturale, dispuse pe mai multe linii, separate prin spaţii.
Date de ieșire
Fişierul de ieşire pozitiex.out va conţine pe prima linie numărul p, reprezentând poziţia în şirul ordonat crescător a primului element din şirul dat. Dacă numărul X nu apare în şir, se va afişa mesajul NU EXISTA.
Restricţii şi precizări
- 1 ≤ n ⩽ 1.0000
- X şi elementele şirului vor avea cel mult 9 cifre
Exemplu 1
- pozitiex.in
- 79 6
- 267 13 45 628 7 79;
pozitiex.out
- 4
Rezolvare
<syntaxhighlight lang="python" line>
def gaseste_pozitie(X, sir):
sir.sort()
for i in range(len(sir)):
if sir[i] == X:
return i + 1 # Returnăm poziția (pornind de la 1)
return -1 # Dacă nu găsim X în șir, returnăm -1
if __name__ == "__main__":
# Citim X și n din fișierul de intrare
with open("pozitiex.in", "r") as f:
X, n = map(int, f.readline().strip().split())
sir = list(map(int, f.read().split()))
# Verificăm restricțiile impuse
if 1 <= n <= 10000 and all(1 <= num <= 10**9 for num in sir):
# Găsim poziția lui X în șir
pozitie = gaseste_pozitie(X, sir)
# Scriem rezultatul în fișierul de ieșire
with open("pozitiex.out", "w") as f:
if pozitie != -1:
f.write(str(pozitie) + "\n")
else:
f.write("NU EXISTA\n")
else:
# Dacă datele de intrare nu respectă restricțiile, afișăm mesaj de eroare
with open("pozitiex.out", "w") as f:
f.write("Date de intrare invalide\n")
</syntaxhighlight>
Explicație
Şirul sortat este 7 13 45 79 267 628. În acest şir, valoarea 79 se află pe poziţia a 4-a.