3587 - Duplicat: Difference between revisions
Pagină nouă: == Cerinta == Se dau un număr n și n+1 numere naturale cuprinse între 1 și n inclusiv. Cerința 1: Pentru un număr k citit, să se afișeze al k-lea termen al șirului citit anterior. Cerința 2: Știind că dintre cele n+1 numere citite, un singur număr se poate repeta, se cere să se afișeze acest număr. == Date de intrare == Programul citește de la tastatură numărul n pe prima linie, iar apoi, pe a doua linie n+1 numere naturale, separate prin spații. Pe a t... |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
== Cerinta == | == Cerinta == | ||
Se dau un număr n și n+1 numere naturale cuprinse între 1 și n inclusiv. | Se dau un număr '''n''' și '''n+1''' numere naturale cuprinse între 1 și n inclusiv. | ||
Cerința 1: Pentru un număr k citit, să se afișeze al k-lea termen al șirului citit anterior. | Cerința 1: Pentru un număr '''k''' citit, să se afișeze al '''k'''-lea termen al șirului citit anterior. | ||
Cerința 2: Știind că dintre cele n+1 numere citite, un singur număr se poate repeta, se cere să se afișeze acest număr. | Cerința 2: Știind că dintre cele '''n+1''' numere citite, un singur număr se poate repeta, se cere să se afișeze acest număr. | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numărul n pe prima linie, iar apoi, pe a doua linie n+1 numere naturale, separate prin spații. Pe a treia linie se va afla numărul k. | Programul citește de la tastatură numărul '''n''' pe prima linie, iar apoi, pe a doua linie '''n+1''' numere naturale, separate prin spații. Pe a treia linie se va afla numărul '''k'''. | ||
== Date de iesire == | == Date de iesire == | ||
Line 15: | Line 15: | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*1 | *1 ⩽ n ⩽ 470000 | ||
*Pentru cerința 2, un singur număr se poate repeta de mai multe ori | *Pentru cerința 2, un singur număr se poate repeta de mai multe ori | ||
*Atenție la limita de timp și de memorie !!! | *Atenție la limita de timp și de memorie !!! | ||
Line 25: | Line 25: | ||
:2 | :2 | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
:2 | :2 | ||
:3 | :3 | ||
Line 35: | Line 35: | ||
:4 | :4 | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | def cerinta_1_si_2(n, numere, k): | ||
aparitii = [0] * (n + 1) | |||
for numar in numere: | |||
aparitii[numar] += 1 | |||
frecventa_maxima = max(aparitii) | |||
numar_repetat = aparitii.index(frecventa_maxima) | |||
count = 0 | |||
for numar in numere: | for numar in numere: | ||
if numar | if numar == numar_repetat: | ||
count += 1 | |||
break | if count == 2: | ||
break | |||
index_k = numere[k - 1] | |||
return index_k, numar_repetat | |||
def verificare_date_intrare(n, numere, k): | |||
if not (1 <= n <= 470000) or len(numere) != n + 1 or not all(1 <= numar <= n for numar in numere) or not (1 <= k <= n + 1): | |||
return False | |||
return True | |||
# Citire numar de elemente | |||
n = int(input("Introduceți numărul n: ")) | |||
# Citire vector de n+1 numere | |||
numere = list(map(int, input("Introduceți n+1 numere, separate prin spațiu: ").split())) | |||
# Citire numar k | |||
k = int(input("Introduceți numărul k: ")) | |||
print(f" | # Verificare date de intrare | ||
if not verificare_date_intrare(n, numere, k): | |||
print("Datele introduse nu corespund restricțiilor impuse") | |||
else: | |||
# Calcul și afișare rezultat | |||
rezultat_cerinta_1, rezultat_cerinta_2 = cerinta_1_si_2(n, numere, k) | |||
print(f"Răspuns pentru cerința 1: {rezultat_cerinta_1}") | |||
print(f"Răspuns pentru cerința 2: {rezultat_cerinta_2}") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 12:26, 29 December 2023
Cerinta[edit | edit source]
Se dau un număr n și n+1 numere naturale cuprinse între 1 și n inclusiv. Cerința 1: Pentru un număr k citit, să se afișeze al k-lea termen al șirului citit anterior. Cerința 2: Știind că dintre cele n+1 numere citite, un singur număr se poate repeta, se cere să se afișeze acest număr.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n pe prima linie, iar apoi, pe a doua linie n+1 numere naturale, separate prin spații. Pe a treia linie se va afla numărul k.
Date de iesire[edit | edit source]
Programul va afișa pe ecran pe prima linie răspunsul pentru cerința 1, iar pe a doua linie răspunsul pentru cerința 2.
Restrictii si precizari[edit | edit source]
- 1 ⩽ n ⩽ 470000
- Pentru cerința 2, un singur număr se poate repeta de mai multe ori
- Atenție la limita de timp și de memorie !!!
Exemplul 1[edit | edit source]
- Intrare
- 5
- 1 2 3 3 4 5
- 2
- Iesire
- Datele introduse corespund restrictiilor impuse
- 2
- 3
Exemplul 2[edit | edit source]
- Intrare
- -5
- 1 5 0 2 2 2.6
- 4
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def cerinta_1_si_2(n, numere, k):
aparitii = [0] * (n + 1)
for numar in numere: aparitii[numar] += 1
frecventa_maxima = max(aparitii) numar_repetat = aparitii.index(frecventa_maxima)
count = 0 for numar in numere: if numar == numar_repetat: count += 1 if count == 2: break
index_k = numere[k - 1] return index_k, numar_repetat
def verificare_date_intrare(n, numere, k):
if not (1 <= n <= 470000) or len(numere) != n + 1 or not all(1 <= numar <= n for numar in numere) or not (1 <= k <= n + 1): return False return True
- Citire numar de elemente
n = int(input("Introduceți numărul n: "))
- Citire vector de n+1 numere
numere = list(map(int, input("Introduceți n+1 numere, separate prin spațiu: ").split()))
- Citire numar k
k = int(input("Introduceți numărul k: "))
- Verificare date de intrare
if not verificare_date_intrare(n, numere, k):
print("Datele introduse nu corespund restricțiilor impuse")
else:
# Calcul și afișare rezultat rezultat_cerinta_1, rezultat_cerinta_2 = cerinta_1_si_2(n, numere, k) print(f"Răspuns pentru cerința 1: {rezultat_cerinta_1}") print(f"Răspuns pentru cerința 2: {rezultat_cerinta_2}")
</syntaxhighlight>
Explicatie[edit | edit source]
Al doilea numar din șir este 2, iar numărul 3 se repeta.