1148 - Exista Impare Div Imp

De la Universitas MediaWiki

Cerinţa

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

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

Date de ieşire

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

Restricţii şi precizări

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

Exemplul 1

Date de intrare

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

Intrare

10001

Ieșire

Valoarea nu respecta conditiile. Incercati din nou.

Rezolvare

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")