1148 - Exista Impare Div Imp
Cerința
Se consideră un șir cu n elemente, numere naturale. Folosind metoda Divide et Impera, determinați suma elementelor pare din acest șir.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.
Date de ieșire
Programul va afișa pe ecran numărul S, reprezentând suma cerută.
Restricții și precizări
1 ≤ n ≤ 1000- elementele șirului vor fi mai mici decât
1.000.000 - se recomandă folosirea metodei Divide et Impera
Exemplul 1
Intrare
6 4 1 8 4 3 5
Ieșire
16
Exemplul 2
Intrare
10001
Ieșire
Valoarea nu respecta conditiile. Incercati din nou.
Rezolvare
<syntaxhighlight lang="python3" line="1"> def suma_pare_divide_et_impera(arr, stanga, dreapta):
if stanga == dreapta:
# Caz de bază: un singur element
return arr[stanga] if arr[stanga] % 2 == 0 else 0
mijloc = (stanga + dreapta) // 2
# Calculează suma pentru fiecare jumătate suma_stanga = suma_pare_divide_et_impera(arr, stanga, mijloc) suma_dreapta = suma_pare_divide_et_impera(arr, mijloc + 1, dreapta)
# Adună rezultatele și returnează suma totală return suma_stanga + suma_dreapta
- Funcție pentru verificarea valorii lui n
def verifica_n(valoare):
return 1 <= valoare <= 1000
- Funcție pentru verificarea valorii lui x
def verifica_x(valoare):
return valoare < 1000000
- Funcție pentru citirea unui număr întreg într-un interval specificat
def citeste_numar(mesaj, functie_verificare):
while True:
numar = int(input(mesaj))
if functie_verificare(numar):
return numar
else:
print(f"Valoarea nu respecta conditiile. Incercati din nou.")
exit()
- Citirea datelor de intrare
n = citeste_numar("Introduceti numarul de elemente (1 <= n <= 1000): ", verifica_n) arr = []
print("Introduceti elementele sirului (elemente < 1000000):", end=" ") for _ in range(n):
element = citeste_numar("", verifica_x)
arr.append(element)
- Calcularea și afișarea rezultatului
rezultat = suma_pare_divide_et_impera(arr, 0, n - 1) print("Suma elementelor pare din sir:", rezultat) </syntaxhighlight>