2963 - Mostenire 1

From Bitnami MediaWiki
Revision as of 13:02, 28 May 2024 by Benzar Ioan (talk | contribs) (Pagină nouă: == Cerința == Se dau doi vectori de numere întregi ordonați crescător. Să se determine elementele comune celor doi vectori folosind căutarea binară. == Date de intrare == Programul citește de la tastatură doi vectori de numere întregi ordonați crescător. == Date de ieșire == Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În următorul rând se va afișa pe ecran vectorul cu elementele comune celor doi vectori. Dacă nu exist...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se dau doi vectori de numere întregi ordonați crescător. Să se determine elementele comune celor doi vectori folosind căutarea binară.

Date de intrare

Programul citește de la tastatură doi vectori de numere întregi ordonați crescător.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În următorul rând se va afișa pe ecran vectorul cu elementele comune celor doi vectori. Dacă nu există elemente comune, se va afișa un vector gol.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

  • 1 ⩽ numar_elemente_vector1, numar_elemente_vector2 ⩽ 100000

Exemplu 1

Intrare

1 2 3 4 5
3 4 5 6 7

Iesire

Datele de intrare corespund restricțiilor impuse. [3, 4, 5]

Exemplu 2

Intrare

1 2 3
4 5 6

Iesire

Datele de intrare corespund restricțiilor impuse. []

Rezolvare

<syntaxhighlight lang="python" line> def citeste_vectori():

   try:
       vector_1 = list(map(int, input("Introduceți elementele primului vector: ").split()))
       vector_2 = list(map(int, input("Introduceți elementele celui de-al doilea vector: ").split()))
       return vector_1, vector_2
   except ValueError:
       return None, None

def valideaza_date(vector_1, vector_2):

   if 1 <= len(vector_1) <= 100000 and 1 <= len(vector_2) <= 100000:
       if all(-10**9 <= elem <= 10**9 for elem in vector_1) and all(-10**9 <= elem <= 10**9 for elem in vector_2):
           return True
   return False

def cautare_binara(vector, element):

   stanga, dreapta = 0, len(vector) - 1
   while stanga <= dreapta:
       mijloc = (stanga + dreapta) // 2
       if vector[mijloc] == element:
           return True
       elif vector[mijloc] < element:
           stanga = mijloc + 1
       else:
           dreapta = mijloc - 1
   return False

def intersectie_binara(vector_1, vector_2):

   rezultat = []
   for element in vector_1:
       if cautare_binara(vector_2, element):
           rezultat.append(element)
   return rezultat

def main():

   vector_1, vector_2 = citeste_vectori()
   
   if vector_1 is None or vector_2 is None:
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return
   
   if valideaza_date(vector_1, vector_2):
       print("Datele de intrare corespund restricțiilor impuse.")
       rezultat = intersectie_binara(vector_1, vector_2)
       print(rezultat)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

if __name__ == "__main__":

   main()

</syntaxhighlight>