1148 - Exista Impare Div Imp: Difference between revisions

From Bitnami MediaWiki
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...
 
Gabii (talk | contribs)
No edit summary
 
Line 1: Line 1:
= Cerința =
= 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.
Se un şir cu <code>n</code> elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă în şir există elemente impare.


= Date de intrare =
= Date de intrare =
Programul citește de la tastatură numărul <code>n</code>, iar apoi cele <code>n</code> elemente ale șirului.
Programul citește de la tastatură numărul <code>n</code>, iar apoi cele <code>n</code> elemente ale şirului, separate prin spaţii.


= Date de ieșire =
= Date de ieşire =
Programul va afișa pe ecran numărul <code>S</code>, reprezentând suma cerută.
Programul afișează pe ecran mesajul <code>DA</code>, dacă şirul conţine elemente impare, respectiv <code>NU</code> în caz contrar.


= Restricții și precizări =
= Restricţii şi precizări =


* <code>1 ≤ n ≤ 1000</code>
* <code>1 ≤ n ≤ 100</code>
* elementele șirului vor fi mai mici decât <code>1.000.000</code>
* elementele şirului vor fi mai mici decât <code>10000</code>
* se recomandă folosirea metodei Divide et Impera


= Exemplul 1 =
= Exemplul 1 =
Intrare
Date de intrare
  6
  5
  4 1 8 4 3 5
2 8 6 10 8
Ieșire
Date de ieșire
  16
  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 ==
== Exemplul 2 ==
Line 29: Line 39:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def suma_pare_divide_et_impera(arr, stanga, dreapta):
def exista_element_impar(arr, stanga, dreapta):
     if stanga == dreapta:
     if stanga == dreapta:
         # Caz de bază: un singur element
         # Caz de bază: un singur element
         return arr[stanga] if arr[stanga] % 2 == 0 else 0
         return arr[stanga] % 2 == 1


     mijloc = (stanga + dreapta) // 2
     mijloc = (stanga + dreapta) // 2


     # Calculează suma pentru fiecare jumătate
     # Verifică dacă există elemente impare în ambele părți
     suma_stanga = suma_pare_divide_et_impera(arr, stanga, mijloc)
     exista_stanga = exista_element_impar(arr, stanga, mijloc)
     suma_dreapta = suma_pare_divide_et_impera(arr, mijloc + 1, dreapta)
     exista_dreapta = exista_element_impar(arr, mijloc + 1, dreapta)


     # Adună rezultatele și returnează suma totală
     # Returnează True dacă există elemente impare în cel puțin una dintre părți
     return suma_stanga + suma_dreapta
     return exista_stanga or exista_dreapta


# Funcție pentru verificarea valorii lui n
# Funcție pentru verificarea valorii lui n
def verifica_n(valoare):
def verifica_n(valoare):
     return 1 <= valoare <= 1000
     return 1 <= valoare <= 100


# Funcție pentru verificarea valorii lui x
# Funcție pentru verificarea valorii lui x
def verifica_x(valoare):
def verifica_x(valoare):
     return valoare < 1000000
     return valoare <= 10000


# Funcție pentru citirea unui număr întreg într-un interval specificat
# Funcție pentru citirea unui număr întreg într-un interval specificat
def citeste_numar(mesaj, functie_verificare):
def citeste_numar(mesaj, functie_verificare):
     while True:
     while True:
         numar = int(input(mesaj))
         try:
        if functie_verificare(numar):
            numar = int(input(mesaj))
            return numar
            if functie_verificare(numar):
        else:
                return numar
            print(f"Valoarea nu respecta conditiile. Incercati din nou.")
            else:
             exit()
                print(f"Valoarea nu respecta conditiile. Incercati din nou.")
        except ValueError:
             print("Introduceti un numar valid.")


# Citirea datelor de intrare
# Citirea datelor de intrare
n = citeste_numar("Introduceti numarul de elemente (1 <= n <= 1000): ", verifica_n)
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 = []
arr = []


print("Introduceti elementele sirului (elemente < 1000000):", end=" ")
print("Introduceti cele {} elemente ale sirului, separate prin spatiu:".format(n), end=" ")
for _ in range(n):
for _ in range(n):
     element = citeste_numar("", verifica_x)
     element = citeste_numar("", verifica_x)
     arr.append(element)
     arr.append(element)


# Calcularea și afișarea rezultatului
# Verificarea și afișarea rezultatului
rezultat = suma_pare_divide_et_impera(arr, 0, n - 1)
rezultat = exista_element_impar(arr, 0, n - 1)
print("Suma elementelor pare din sir:", rezultat)
if rezultat:
    print("DA")
else:
    print("NU")
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 19:33, 3 December 2023

Cerinţa[edit | edit source]

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

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.

Date de ieşire[edit | edit source]

Programul afișează pe ecran mesajul DA, dacă şirul conţine elemente impare, respectiv NU în caz contrar.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • elementele şirului vor fi mai mici decât 10000

Exemplul 1[edit | edit source]

Date de intrare

5
2 8 6 10 8

Date de ieșire

NU

Exemplul 2[edit | edit source]

Date de intrare

1001

Date de ieșire

Valoarea nu respecta conditiile. Incercati din nou.

Date de ieşire[edit | edit source]

Restricţii şi precizări[edit | edit source]

Exemplul 2[edit | edit source]

Intrare

10001

Ieșire

Valoarea nu respecta conditiile. Incercati din nou.

Rezolvare[edit | edit source]

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

def verifica_n(valoare):

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

def verifica_x(valoare):

   return valoare <= 10000
  1. 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.")
  1. 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)
  1. Verificarea și afișarea rezultatului

rezultat = exista_element_impar(arr, 0, n - 1) if rezultat:

   print("DA")

else:

   print("NU")

</syntaxhighlight>