3215 – Kth
Sursa: Kth
Cerinţă[edit | edit source]
Se dă un șir cu n
elemente întregi. Funcția va returna poziția din vector unde x
apare pentru a k
-a oară, sau -1
dacă x
nu apare de cel puțin k
ori
Date de intrare[edit | edit source]
Programul va citi de la tastatură valoarean
, apoi n
numere întregi reprezentând elementele șirului, iar mai apoi, elementele x și k.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa poziția din vector în care x apare pentru a k-a oară, sau -1 dacă x nu apare de cel puțin k ori. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".
Restricţii şi precizări[edit | edit source]
- 1 <= n <= 1000
- valorile elementelor șirului vor fi cuprinse între -1000 și 1000
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- Intrare
- Introduceti numarul de elemente a sirului: 6
- Introduceti 6 numere separate prin spatiu:4 2 5 2 6 2
- Introduceti elementul x:2
- Introduceti elementul k:2
- Ieșire
- Datele introduse sunt corecte!
- 3
Exemplul 2[edit | edit source]
- Intrare
- Introduceti numarul de elemente a sirului: 4
- Introduceti 4 numere separate prin spatiu:2 3 4 5
- Introduceti elementul x:5
- Introduceti elementul k:5
- Ieșire
- Datele introduse sunt corecte!
- -1
Exemplul 3[edit | edit source]
- Intrare
- Introduceti numarul de elemente a sirului: 123456
- Ieșire
- Datele introduse sunt incorecte!
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def is_integer(value):
return value.isdigit()
def verificare_nr_elemente(n):
if is_integer(n): if 1 <= int(n) <= 1000: return n else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit()
def verificare_vector(n, vector):
if len(vector) != int(n): print("Datele introduse sunt incorecte!") exit() else: for i in vector: if is_integer(i): if -1000 <= int(i) <= 1000: continue else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit()
def verificare_x(x, lst_int):
if is_integer(x): if -1000 <= int(x) <= 1000: if x in lst_int: return x else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit()
def verificare_k(k):
if is_integer(k): if 0 <= int(k) <= 1000: return k else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit()
def Kth(sir, n, x, k):
count = 0 for i in range(int(n)): if sir[i] == int(x): count += 1 if count == int(k): print(i) exit() print("-1")
if __name__ == '__main__':
n = input("Introduceti numarul de elemente a sirului: ") verificare_nr_elemente(n) elem = input(f"Introduceti {n} numere separate prin spatiu:").split() verificare_vector(n, elem) lst_int = list(map(int, elem)) x = input("Introduceti elementul x:") verificare_x(x, lst_int) k = input("Introduceti elementul k:") verificare_k(k) print("Datele introduse sunt corecte!") Kth(lst_int, n, x, k)
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
Funcția is_integer(value)
verifică dacă o valoare este de tip integer și returnează un boolean.
Funcția verificare_nr_elemente(n)
primește ca parametru n
, numărul de elemente ale vectorului. Verifică dacă valoarea este un integer și se află în intervalul [1, 1000]. Dacă nu respectă aceste condiții, se afișează un mesaj de eroare și programul se oprește cu exit()
. Altfel, funcția returnează n
.
Funcția verificare_vector(n, vector)
primește ca parametri n
și vector
, respectiv numărul de elemente și vectorul în sine. Verifică dacă numărul de elemente din vector corespunde cu n
. Dacă da, verifică pentru fiecare element din vector dacă este un integer și se află în intervalul [-1000, 1000]. Dacă nu, se afișează un mesaj de eroare și programul se oprește cu exit()
. Altfel, funcția nu returnează nimic.
Funcția verificare_x(x)
primește ca parametru x
și verifică dacă este un integer și se află în intervalul [-1000, 1000]. Dacă nu respectă aceste condiții, se afișează un mesaj de eroare și programul se oprește cu exit()
. Altfel, funcția returnează x
.
Funcția verificare_k(k)
primește ca parametru k
și verifică dacă este un integer și se află în intervalul [0, 1000]. Dacă nu respectă aceste condiții, se afișează un mesaj de eroare și programul se oprește cu exit()
. Altfel, funcția returnează k
.
Funcția Kth(sir, n, x, k)
primește ca parametri sir
, n
, x
și k
, respectiv vectorul, numărul de elemente din vector, valoarea căutată și numărul de apariții căutate. Funcția caută valoarea x
în vector și numără de câte ori apare. Când numărul de apariții dorit k
este atins, se afișează poziția elementului și programul se oprește cu exit()
. Dacă x
nu apare de cel puțin k
ori, se afișează -1
.
În funcția principală (__main__
), se citesc valorile n
, elem
, x
și k
de la utilizator. Se verifică ca toate valorile să respecte condițiile cu ajutorul funcțiilor verificare_nr_elemente(n)
, verificare_vector(n, elem)
, verificare_x(x)
și verificare_k(k)
. Dacă toate valorile sunt corecte, se afișează un mesaj de confirmare și se apelează funcția Kth(lst_int, n, x, k)
.