0249 - PozitieX

From Bitnami MediaWiki

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

Exemplul 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.