0518 - SecvZero

De la Universitas MediaWiki
Versiunea din 21 martie 2023 20:57, autor: Flaviu (discuție | contribuții) (Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4265/perechiab 0518 - SecvZero] ---- == Cerinţa == Se dă un vector cu n elemente numere naturale. Determinați cea mai lungă secvență de elemente nule din vector. Dacă în vector există mai multe secvențe de elemente nule de lungime maximă se va determina cea mai din stânga. == Date de intrare == Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului. == Date de ieșire =...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Sursa: 0518 - SecvZero


Cerinţa

Se dă un vector cu n elemente numere naturale. Determinați cea mai lungă secvență de elemente nule din vector. Dacă în vector există mai multe secvențe de elemente nule de lungime maximă se va determina cea mai din stânga.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieșire

Programul va afișa pe ecran indicii st dr ai capetelor secvenței determinate, separați printr-un spațiu.

Restricţii şi precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 1000
  • indicii elementelor vectorului sunt cuprinși între 1 și n
  • vectorul va conține cel puțin un element nul

Exemplu

Intrare
10
0 1 0 0 0 5 0 0 0 2
Ieșire
3 5

Rezolvare

Rezolvare ver. 1

# 0518 - SecvZero

n = int(input("Introduceți numărul de elemente din vector: "))
v = list(map(int, input("Introduceți elementele vectorului: ").split()))

start = -1  # indexul de start al secvenței de elemente nule
end = -1  # indexul de sfârșit al secvenței de elemente nule
max_length = 0  # lungimea maximă a secvenței de elemente nule
current_start = -1  # indexul de start al secvenței curente de elemente nule
current_length = 0  # lungimea curentă a secvenței de elemente nule

for i in range(n):
    if v[i] == 0:  # dacă am găsit un element nul
        if current_start == -1:  # dacă nu eram deja într-o secvență de elemente nule
            current_start = i  # începem o secvență nouă
        current_length += 1  # creștem lungimea curentă a secvenței
    else:  # dacă am găsit un element nenul
        if current_length > max_length:  # dacă secvența curentă este mai lungă decât maximul anterior
            start = current_start  # actualizăm indexul de start al secvenței maxime
            end = i - 1  # actualizăm indexul de sfârșit al secvenței maxime
            max_length = current_length  # actualizăm lungimea maximă
        current_start = -1  # resetăm indexul de start al secvenței curente
        current_length = 0  # resetăm lungimea curentă a secvenței

# Afisăm indicii de start și sfârșit ai secvenței de elemente nule
print(start, end)