1148 - Exista Impare Div Imp

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă un şir cu n elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă în şir există elemente impare.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.

Date de ieşire[edit | edit source]

Programul afișează pe ecran mesajul DA, dacă şirul conţine elemente impare, respectiv NU în caz contrar.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • elementele şirului vor fi mai mici decât 10000

Exemplul 1[edit | edit source]

Date de intrare

5
2 8 6 10 8

Date de ieșire

NU

Exemplul 2[edit | edit source]

Date de intrare

1001

Date de ieșire

Valoarea nu respecta conditiile. Incercati din nou.

Date de ieşire[edit | edit source]

Restricţii şi precizări[edit | edit source]

Exemplul 2[edit | edit source]

Intrare

10001

Ieșire

Valoarea nu respecta conditiile. Incercati din nou.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def exista_element_impar(arr, stanga, dreapta):

   if stanga == dreapta:
       # Caz de bază: un singur element
       return arr[stanga] % 2 == 1
   mijloc = (stanga + dreapta) // 2
   # Verifică dacă există elemente impare în ambele părți
   exista_stanga = exista_element_impar(arr, stanga, mijloc)
   exista_dreapta = exista_element_impar(arr, mijloc + 1, dreapta)
   # Returnează True dacă există elemente impare în cel puțin una dintre părți
   return exista_stanga or exista_dreapta
  1. Funcție pentru verificarea valorii lui n

def verifica_n(valoare):

   return 1 <= valoare <= 100
  1. Funcție pentru verificarea valorii lui x

def verifica_x(valoare):

   return valoare <= 10000
  1. Funcție pentru citirea unui număr întreg într-un interval specificat

def citeste_numar(mesaj, functie_verificare):

   while True:
       try:
           numar = int(input(mesaj))
           if functie_verificare(numar):
               return numar
           else:
               print(f"Valoarea nu respecta conditiile. Incercati din nou.")
       except ValueError:
           print("Introduceti un numar valid.")
  1. Citirea datelor de intrare

while True:

   n = citeste_numar("Introduceti numarul de elemente (1 <= n <= 100): ", verifica_n)
   if verifica_n(n):
       break
   else:
       print("Numarul de elemente nu respecta conditiile. Incercati din nou.")

arr = []

print("Introduceti cele {} elemente ale sirului, separate prin spatiu:".format(n), end=" ") for _ in range(n):

   element = citeste_numar("", verifica_x)
   arr.append(element)
  1. Verificarea și afișarea rezultatului

rezultat = exista_element_impar(arr, 0, n - 1) if rezultat:

   print("DA")

else:

   print("NU")

</syntaxhighlight>