1329 – Șir Zigzag

From Bitnami MediaWiki
Revision as of 14:02, 30 April 2023 by Petras.du.ioana (talk | contribs) (Am creat de la zero.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

<syntaxhighlight lang="python" line>

  1. citim numarul de elemente din sir

numar_elemente = int(input("Introduceti numarul de elemente din sir: "))

  1. 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()
  1. 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()
  1. initializam o variabila care va retine daca sirul este zigzag sau nu

este_zigzag = True

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

  1. afisam rezultatul

if este_zigzag:

   print("DA")

else:

   print("NU")

print("Datele sunt introduse corect.")

</syntaxhighlight>