1017 - Sum Pare Vec

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul S, reprezentând suma cerută.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000
  • elementele șirului vor fi mai mici decât 1.000.000
  • se recomandă folosirea metodei Divide et Impera

Exemplul 1[edit | edit source]

Intrare

6
4 1 8 4 3 5 

Ieșire

16

Exemplul 2[edit | edit source]

Intrare

5
11111111111

Ieșire

Eroare: Elementul 11111111111 trebuie să fie între 1 și 1000000.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def validate_input(n):

   if not (1 <= n <= 1000):
       print("Eroare: Numărul de elemente trebuie să fie între 1 și 1000.")
       exit()

def validate_element(element):

   if not (1 <= element <= 1000000):
       print(f"Eroare: Elementul {element} trebuie să fie între 1 și 1000000.")
       exit()

def sum_of_even_elements(arr, start, end):

   if start > end:
       return 0
   
   mid = (start + end) // 2
   left_sum = sum_of_even_elements(arr, start, mid - 1)
   right_sum = sum_of_even_elements(arr, mid + 1, end)
   current_sum = 0
   if arr[mid] % 2 == 0:
       current_sum = arr[mid]
   return left_sum + right_sum + current_sum

def main():

   n = int(input("Introduceți numărul de elemente: "))
   validate_input(n)
   arr = []
   for i in range(n):
       element = int(input(f"Introduceți elementul {i + 1}: "))
       validate_element(element)
       arr.append(element)
   result = sum_of_even_elements(arr, 0, n - 1)
   print(f"Suma elementelor pare din șir: {result}")

if __name__ == "__main__":

   main()

</syntaxhighlight>