1148 - Exista Impare Div Imp: Difference between revisions
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... |
No edit summary |
||
Line 1: | Line 1: | ||
= | = Cerinţa = | ||
Se | Se dă 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 | 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 | = Date de ieşire = | ||
Programul | 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 = | ||
* <code>1 ≤ n ≤ | * <code>1 ≤ n ≤ 100</code> | ||
* elementele | * elementele şirului vor fi mai mici decât <code>10000</code> | ||
= Exemplul 1 = | = Exemplul 1 = | ||
Date de intrare | |||
6 | 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 == | == Exemplul 2 == | ||
Line 29: | Line 39: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | 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 | return arr[stanga] % 2 == 1 | ||
mijloc = (stanga + dreapta) // 2 | 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 | 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 <= | 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 < | 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: | ||
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 | # Citirea datelor de intrare | ||
n = citeste_numar("Introduceti numarul de elemente (1 <= 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 | 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) | ||
# | # Verificarea și afișarea rezultatului | ||
rezultat = | rezultat = exista_element_impar(arr, 0, n - 1) | ||
print(" | 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
- 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")
</syntaxhighlight>