1329 – Șir Zigzag: Difference between revisions
Line 48: | Line 48: | ||
=== Rezolvare ver. 1 === | === Rezolvare ver. 1 === | ||
<syntaxhighlight lang="python" line> | |||
def citeste_numar_elemente(): | def citeste_numar_elemente(): | ||
numar_elemente = int(input("Introduceti numarul de elemente din sir: ")) | numar_elemente = int(input("Introduceti numarul de elemente din sir: ")) |
Latest revision as of 09:39, 19 May 2023
Sursa: [1]
Cerința[edit | edit source]
Un şir se numeşte şir zigzag, dacă monotonia elementelor pe poziții succesive alternează între strict crescător și strict descrescător, adică a[1]>a[2]<a[3]>a[4] ... sau a[1]<a[2]>a[3]<a[4].... Se citeşe un şir cu n elemente. Să se verifice dacă este şir zigzag.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele șirului.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran unul dintre mesajele DA sau NU după cum șirul dat este şir zigzag sau nu.
Restricții și precizări[edit | edit source]
- 3 ≤ n ≤ 1000
- 0 ≤ elementele şirului ≤ 1 000 000 000
Exemplu 1[edit | edit source]
- Intrare
- 5
- 1 5 3 7 5
- Ieșire
- DA
Explicație[edit | edit source]
Avem relațiile 1 < 5 > 3 < 7 > 5, deci e vorba de un șir zigzag.
Exemplu 2[edit | edit source]
- Intrare
- 5
- 4 3 5 1 2
- Ieșire
- DA
Explicație[edit | edit source]
Avem relațiile 4 > 3 < 5 > 1 < 2, deci e vorba de un șir zigzag.
Exemplu 3[edit | edit source]
- Intrare
- 5
- 4 3 2 1 2
- Ieșire
- NU
Explicație[edit | edit source]
Primele trei elemente ale șirului nu își schimbă monotonia, deci nu e șir zigzag.
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line> def citeste_numar_elemente():
numar_elemente = int(input("Introduceti numarul de elemente din sir: ")) if numar_elemente < 3 or numar_elemente > 1000: print("Numarul de elemente trebuie sa fie intre 3 si 1000") exit() return numar_elemente
def citeste_sir(numar_elemente):
sir = list(map(int, input("Introduceti sirul de numere: ").split())) for numar in sir: if numar < 0 or numar > 1000000000: print("Numerele trebuie sa fie intre 0 si 1 000 000 000") exit() if len(sir) != numar_elemente: print(f"Numarul de elemente din sir trebuie sa fie {numar_elemente}") exit() return sir
def este_zigzag(sir):
for i in range(1, len(sir) - 1): if not ((sir[i-1] < sir[i] and sir[i] > sir[i+1]) or (sir[i-1] > sir[i] and sir[i] < sir[i+1])): return False return True
if __name__ == "__main__":
numar_elemente = citeste_numar_elemente() sir = citeste_sir(numar_elemente) print("Datele sunt introduse corect.") if este_zigzag(sir): print("DA") else: print("NU") print("Datele sunt introduse corect.")
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
- citim numarul de elemente din sir
numar_elemente = int(input("Introduceti numarul de elemente din sir: "))
- validam daca numarul de elemente se afla in intervalul permis
if numar_elemente < 3 or numar_elemente > 1000:
print("Numarul de elemente trebuie sa fie intre 3 si 1000") exit()
- citim sirul de numere si validam ca fiecare element se afla in intervalul permis
sir = list(map(int, input("Introduceti sirul de numere: ").split())) for numar in sir:
if numar < 0 or numar > 1000000000: print("Numerele trebuie sa fie intre 0 si 1 000 000 000") exit()
- initializam o variabila care va retine daca sirul este zigzag sau nu
este_zigzag = True
- parcurgem sirul si verificam monotonia triplurilor de elemente consecutive
for i in range(1, numar_elemente - 1):
if not ((sir[i-1] < sir[i] and sir[i] > sir[i+1]) or (sir[i-1] > sir[i] and sir[i] < sir[i+1])): este_zigzag = False break
print("Datele sunt introduse corect.")
- afisam rezultatul
if este_zigzag:
print("DA")
else:
print("NU")
print("Datele sunt introduse corect.")
</syntaxhighlight>