1329 – Șir Zigzag: Difference between revisions
Am creat de la zero. |
|||
Line 46: | Line 46: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
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 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Revision as of 09:35, 19 May 2023
Sursa: [1]
Cerința
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
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele șirului.
Date de ieșire
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
- 3 ≤ n ≤ 1000
- 0 ≤ elementele şirului ≤ 1 000 000 000
Exemplu 1
- Intrare
- 5
- 1 5 3 7 5
- Ieșire
- DA
Explicație
Avem relațiile 1 < 5 > 3 < 7 > 5, deci e vorba de un șir zigzag.
Exemplu 2
- Intrare
- 5
- 4 3 5 1 2
- Ieșire
- DA
Explicație
Avem relațiile 4 > 3 < 5 > 1 < 2, deci e vorba de un șir zigzag.
Exemplu 3
- Intrare
- 5
- 4 3 2 1 2
- Ieșire
- NU
Explicație
Primele trei elemente ale șirului nu își schimbă monotonia, deci nu e șir zigzag.
Rezolvare
Rezolvare ver. 1
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
<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>