1329 – Șir Zigzag: Difference between revisions

From Bitnami MediaWiki
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>

  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>