3587 - Duplicat: Difference between revisions

From Bitnami MediaWiki
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 n 470000
*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
:Datele introduse corespund restrictiilor impuse
:2
:2
:3
:3
Line 35: Line 35:
:4
:4
;Iesire
;Iesire
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse




== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def main():
def cerinta_1_si_2(n, numere, k):
     # Citirea datelor de intrare
     aparitii = [0] * (n + 1)
    n = int(input("Introduceti numarul n: "))
    numere = list(map(int, input("Introduceti n+1 numere separate prin spatii: ").split()))
    k = int(input("Introduceti numarul k: "))


     # Cerința 1: Afișarea k-lea termen al șirului
     for numar in numere:
     termen_k = numere[k - 1]
        aparitii[numar] += 1
     print(f"Al {k}-lea termen al sirului este: {termen_k}")
 
     frecventa_maxima = max(aparitii)
     numar_repetat = aparitii.index(frecventa_maxima)


     # Cerința 2: Afișarea numărului care se repetă
     count = 0
    numar_repetat = None
    numere_set = set()
     for numar in numere:
     for numar in numere:
         if numar in numere_set:
         if numar == numar_repetat:
             numar_repetat = numar
             count += 1
             break
             if count == 2:
         numere_set.add(numar)
                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"Numarul care se repeta este: {numar_repetat}")
# 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}")


if __name__ == "__main__":
    main()


</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
  1. Citire numar de elemente

n = int(input("Introduceți numărul n: "))

  1. Citire vector de n+1 numere

numere = list(map(int, input("Introduceți n+1 numere, separate prin spațiu: ").split()))

  1. Citire numar k

k = int(input("Introduceți numărul k: "))

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