1148 -Exista Impare Div Imp

From Bitnami MediaWiki
Revision as of 21:36, 9 December 2023 by Gabii (talk | contribs) (Am uitat sa dau save =])
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit]

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]

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]

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

Restricţii şi precizări[edit]

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

Exemplul 1[edit]

Date de intrare

5
2 8 6 10 8

Date de ieșire

NU

Exemplul 2[edit]

Date de intrare

101

Consola

Valoarea nu respecta conditiile. Incercati din nou.

Rezolvare[edit]

<syntaxhighlight lang="python3"> 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 = []

  1. Reading array elements

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

   element = citeste_numar(f"Introduceti elementul {i + 1} al sirului: ", 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>