0295 – Vecini

De la Universitas MediaWiki

Sursă: [1]

Cerinţa

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

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

Date de ieşire

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

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

Exemplu

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

Rezolvare

#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")

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..

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.