1148 - Exista Impare Div Imp

From Bitnami MediaWiki
Revision as of 19:18, 3 December 2023 by Gabii (talk | contribs) (Pagină nouă: = Cerința = Se consideră un șir cu <code>n</code> 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 <code>n</code>, iar apoi cele <code>n</code> elemente ale șirului. = Date de ieșire = Programul va afișa pe ecran numărul <code>S</code>, reprezentând suma cerută. = Restricții și precizări = * <code>1 ≤ n ≤ 1000</code> * elementele...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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
  1. Funcție pentru verificarea valorii lui n

def verifica_n(valoare):

   return 1 <= valoare <= 1000
  1. Funcție pentru verificarea valorii lui x

def verifica_x(valoare):

   return valoare < 1000000
  1. 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()
  1. 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)
  1. Calcularea și afișarea rezultatului

rezultat = suma_pare_divide_et_impera(arr, 0, n - 1) print("Suma elementelor pare din sir:", rezultat) </syntaxhighlight>