1148 - Exista Impare Div Imp
Cerinţa
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
Programul citește de la tastatură numărul n
, iar apoi cele n
elemente ale şirului, separate prin spaţii.
Date de ieşire
Programul afișează pe ecran mesajul DA
, dacă şirul conţine elemente impare, respectiv NU
în caz contrar.
Restricţii şi precizări
1 ≤ n ≤ 100
- elementele şirului vor fi mai mici decât
10000
Exemplul 1
Date de intrare
5 2 8 6 10 8
Date de ieșire
NU
Exemplul 2
Date de intrare
1001
Date de ieșire
Valoarea nu respecta conditiile. Incercati din nou.
Date de ieşire
Restricţii şi precizări
Exemplul 2
Intrare
10001
Ieșire
Valoarea nu respecta conditiile. Incercati din nou.
Rezolvare
<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
- Funcție pentru verificarea valorii lui n
def verifica_n(valoare):
return 1 <= valoare <= 100
- Funcție pentru verificarea valorii lui x
def verifica_x(valoare):
return valoare <= 10000
- 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.")
- 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)
- Verificarea și afișarea rezultatului
rezultat = exista_element_impar(arr, 0, n - 1) if rezultat:
print("DA")
else:
print("NU")
</syntaxhighlight>