1665 - Pozitie Sir

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

Considerăm şirul a cu n numere naturale nenule distincte două câte două şi un număr x. Scrieţi un program care determină poziţia pe care se va găsi numărul x în şirul a, dacă acesta ar fi ordonat descrescător.

Date de intrare

Programul citește de la tastatură numerele n şi x, urmate de n numere naturale reprezentând elementele şirului a.

Date de ieșire

Programul va afișa pe ecran poziţia determinată mai sus. Dacă numărul x nu se regăseşte în şir, valoarea afişată va fi -1.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează poziţia pe care se va găsi numărul x în şirul a, dacă acesta ar fi ordonat descrescător.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări

1 ≤ n < 200.000 cele n numere citite vor fi mai mici decât 109 considerăm elementele şirului a numerotate de la 1 la n

Exemplul 1

Datele de intrare
Nr n si x sunt:
9 13
Elementele sirului a sunt:
26 2 5 30 13 45 62 7 79
Datele de ieșire
Datele sunt introduse corect.
6


Rezolvare

#1665
def cautare_pozitie(a, x):
    # sortăm lista în ordine descrescătoare
    a.sort(reverse=True)

    # căutăm poziția lui x
    if x in a:
        pos = a.index(x) + 1
        return pos
    else:
        return -1

def validare_input(n, a):
    # verificăm restricțiile pentru n
    if n >= 200000:
        return False
    # verificăm restricțiile pentru elementele din a
    for elem in a:
        if elem >= 10**9:
            return False
    return True

if __name__ == '__main__':
    # citim n și x
    n, x = map(int, input("Nr n si x sunt:").split())

    # citim elementele șirului a
    a = list(map(int, input("Elementele sirului a sunt:").split()))

    if not validare_input(n, a):
        print("Datele nu corespund restricțiilor impuse.")
    else:
        # apelam functia cautare_pozitie pentru a gasi pozitia lui x in sirul a
        pozitie = cautare_pozitie(a, x)
        print("Datele sunt introduse corect.")
        print(pozitie)

Explicatie cod:

Acest cod definește două funcții:

cautare_pozitie(a, x): această funcție primește o listă de numere a și un număr x, sortează lista în ordine descrescătoare, iar apoi caută poziția lui x în listă folosind metoda index(). Dacă x este găsit în listă, funcția returnează poziția sa în listă. Dacă nu este găsit, funcția returnează -1.

validare_input(n, a): această funcție primește un număr întreg n și o listă de numere a și verifică dacă acestea respectă restricțiile impuse în enunțul problemei: n trebuie să fie mai mic decât 200000, iar elementele din a trebuie să fie mai mici decât 10^9. Dacă datele introduse nu respectă aceste restricții, funcția returnează False. În caz contrar, funcția returnează True.

Funcția validare_input(n, a) este apelată în blocul if __name__ == '__main__': pentru a verifica dacă datele introduse de utilizator respectă restricțiile impuse. Dacă datele introduse nu sunt valide, se afișează un mesaj de eroare. În caz contrar, se apelează funcția cautare_pozitie(a, x) pentru a găsi poziția lui x în lista a, iar apoi se afișează rezultatul.