0518 - SecvZero

From Bitnami MediaWiki
Revision as of 20:57, 21 March 2023 by Flaviu (talk | contribs) (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 =...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

<syntaxhighlight lang="python" line>

  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
  1. Afisăm indicii de start și sfârșit ai secvenței de elemente nule

print(start, end)

</syntaxhighlight>