0295 – Vecini: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 2: Line 2:


== Cerinţa ==
== Cerinţa ==
Se dă un şir cu '''numar''' elemente, numere naturale. Să se verifice dacă există în şir elemente care să aibă ambii vecini de aceeaşi paritate cu el.
Se dă un şir cu '''n''' elemente, numere naturale. Să se verifice dacă există în şir elemente care să aibă ambii vecini de aceeaşi paritate cu el.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numărul '''numar''', iar apoi '''numar''' numere naturale, separate prin spaţii.
Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spaţii.
== Date de ieşire ==
== Date de ieşire ==
Programul afișează pe ecran mesajul '''DA''', dacă există în şir elemente care să aibă ambii vecini de aceeaşi paritate cu el, respectiv '''NU''' în caz contrar.
Dacă datele introduse sunt corecte, pe ecran se va afișa '''"Datele introduse sunt corecte."''', apoi programul afișează mesajul '''DA''', dacă există în şir elemente care să aibă ambii vecini de aceeaşi paritate cu el, respectiv '''NU''' în caz contrar. Dacă datele introduse nu sunt valide, se afișează mesajul: '''"Datele introduse nu sunt corecte."'''.
== Restricții și precizări ==
== Restricții și precizări ==
* ''' 1 ⩽ numar ⩽ 100 '''
* ''' 1 ⩽ n ⩽ 100 '''
* elementele şirului vor avea cel mult '''9''' cifre
* elementele şirului vor avea cel mult '''9''' cifre


Line 16: Line 16:
: 803 60 102 408 6
: 803 60 102 408 6
; Ieșire
; Ieșire
: Datele introduse sunt corecte.
: DA
: DA


Line 21: Line 22:


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#0295


numar = int(input())
def validare_date(n, lista):
v = [int(input()) for i in range(numar)]
    if n < 1 or n > 100:
        print("Datele introduse nu sunt corecte.")
        exit()
    for elem in lista:
        if elem < 0 or elem > 999999999:
            print("Datele introduse nu sunt corecte.")
            exit()
    print("Datele introduse sunt corecte.")


for i in range(numar):
    v[i] = v[i] % 2


for i in range(1, numar-1):
def verificaVecinii(lista, pozitie):
     if v[i-1] == v[i] and v[i] == v[i+1]:
     if (pozitie == 0 or lista[pozitie-1] % 2 == lista[pozitie] % 2) and (pozitie == len(lista)-1 or lista[pozitie+1] % 2 == lista[pozitie] % 2):
         print("DA")
        return True
         break
    else:
        return False
 
 
if __name__ == "__main__":
    n = int(input("Introduceți un numar: "))
    lista = list(map(int, input("Introduceți numerele din lista cu spatiu intre ele: ").split()))
    validare_date(n, lista)
    gasit = False
    for i in range(n):
         if verificaVecinii(lista, i):
            print("DA")
            gasit = True
            break
    if not gasit:
         print("NU")
 


if i == numar-2:
    print("NU")


</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare ==
Funcția '''validare_date(n, lista)''' validează datele introduse de utilizator. Ea primește ca parametri numărul de elemente din șir și lista de elemente, iar în cazul în care numărul de elemente nu se încadrează în intervalul [1, 100] sau cel puțin un element din listă depășește valoarea maximă permisă de 999999999, funcția afișează un mesaj de eroare și se termină executarea programului. În cazul în care toate datele sunt valide, se afișează mesajul '''Datele introduse sunt corecte.'''.<br><br>Funcția '''verificaVecinii(lista, pozitie)''' primește ca parametri lista de numere și poziția elementului curent din listă și verifică dacă acesta are ambii vecini cu aceeași paritate cu el. Dacă da, returnează '''True''', altfel returnează '''False'''.<br><br>În funcția principală '''__main__''', se citește numărul de elemente din șir și lista de elemente de la tastatură folosind funcția '''input()'''. Lista de elemente este convertită într-o listă de întregi folosind funcția '''map()''' și metoda '''split()''' pentru a separa elementele citite prin spații. Apoi, funcția '''validare_date(n, lista)''' este apelată pentru a valida datele introduse.<br><br>În continuare, se parcurge lista cu ajutorul unui for și se verifică pentru fiecare element dacă are ambii vecini cu aceeași paritate cu el folosind funcția '''verificaVecinii(lista, i)'''. Dacă se găsește un astfel de element, se afișează mesajul '''DA''' și se setează variabila gasit pe '''True'''. Dacă nu se găsește niciun element cu această proprietate, se afișează mesajul '''NU'''.

Latest revision as of 18:36, 28 April 2023

Sursă: [1]

Cerinţa[edit | edit source]

Se dă un şir cu n elemente, numere naturale. Să se verifice dacă există în şir elemente care să aibă ambii vecini de aceeaşi paritate cu el.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii.

Date de ieşire[edit | edit source]

Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul afișează mesajul DA, dacă există în şir elemente care să aibă ambii vecini de aceeaşi paritate cu el, respectiv NU în caz contrar. Dacă datele introduse nu sunt valide, se afișează mesajul: "Datele introduse nu sunt corecte.".

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 100
  • elementele şirului vor avea cel mult 9 cifre

Exemplu[edit | edit source]

Intrare
5
803 60 102 408 6
Ieșire
Datele introduse sunt corecte.
DA

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0295

def validare_date(n, lista):

   if n < 1 or n > 100:
       print("Datele introduse nu sunt corecte.")
       exit()
   for elem in lista:
       if elem < 0 or elem > 999999999:
           print("Datele introduse nu sunt corecte.")
           exit()
   print("Datele introduse sunt corecte.")


def verificaVecinii(lista, pozitie):

   if (pozitie == 0 or lista[pozitie-1] % 2 == lista[pozitie] % 2) and (pozitie == len(lista)-1 or lista[pozitie+1] % 2 == lista[pozitie] % 2):
       return True
   else:
       return False


if __name__ == "__main__":

   n = int(input("Introduceți un numar: "))
   lista = list(map(int, input("Introduceți numerele din lista cu spatiu intre ele: ").split()))
   validare_date(n, lista)
   gasit = False
   for i in range(n):
       if verificaVecinii(lista, i):
           print("DA")
           gasit = True
           break
   if not gasit:
       print("NU")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Funcția validare_date(n, lista) validează datele introduse de utilizator. Ea primește ca parametri numărul de elemente din șir și lista de elemente, iar în cazul în care numărul de elemente nu se încadrează în intervalul [1, 100] sau cel puțin un element din listă depășește valoarea maximă permisă de 999999999, funcția afișează un mesaj de eroare și se termină executarea programului. În cazul în care toate datele sunt valide, se afișează mesajul Datele introduse sunt corecte..

Funcția verificaVecinii(lista, pozitie) primește ca parametri lista de numere și poziția elementului curent din listă și verifică dacă acesta are ambii vecini cu aceeași paritate cu el. Dacă da, returnează True, altfel returnează False.

În funcția principală __main__, se citește numărul de elemente din șir și lista de elemente de la tastatură folosind funcția input(). Lista de elemente este convertită într-o listă de întregi folosind funcția map() și metoda split() pentru a separa elementele citite prin spații. Apoi, funcția validare_date(n, lista) este apelată pentru a valida datele introduse.

În continuare, se parcurge lista cu ajutorul unui for și se verifică pentru fiecare element dacă are ambii vecini cu aceeași paritate cu el folosind funcția verificaVecinii(lista, i). Dacă se găsește un astfel de element, se afișează mesajul DA și se setează variabila gasit pe True. Dacă nu se găsește niciun element cu această proprietate, se afișează mesajul NU.