1148 - Exista Impare Div Imp
De la Universitas MediaWiki
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
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")