1400 - E Palindrom

De la Universitas MediaWiki

Cerința

Se citește un șir cu n numere naturale. Să se verifice dacă prin rearajarea elementelor șirului se poate obține un șir palindrom.

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 sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa unul dintre mesajele DA sau NU. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".

Restricții și precizări

1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 10.000

Exemplu 1

Intrare
5
5 2 3 3 5
Ieșire
Datele introduse corespund restricțiilor impuse.
DA


Exemplu 2

Intrare
0
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare

# 1400 E Palindrom
def verificare(nr_elem):
    if 1 <= nr_elem <= 10000:
        return True
    else:
        raise ValueError


def e_palindrom(n):
    frecventa = []          # avem nevoie de un vector de frecventa pentru a vedea de cate ori apare fiecare numar
    for i in range(10001):  # numerele introduse sunt mai mici de 10000
        frecventa.append(0)

    for i in range(n):
        numar = int(input("Introduceti un numar: "))
        # citirea numerelor din sir, daca nu se pot converti la int
        # va fi eroare de tipul ValueError pe care o tratam in main
        frecventa[numar] += 1

    print("Datele introduse corespund restricțiilor impuse.")

    nr_impare = 0               # numaram cate numere apar de numar impar de ori
    for numar in frecventa:
        if numar % 2 == 1:
            nr_impare += 1
        if nr_impare >= 2:      # daca sunt mai mult de 2 numere atunci nu poate fi palindrom
            print("NU")
            return

    print("DA")
    return


if __name__ == '__main__':
    try:
        N = int(input("Introduceti numarul de elemente ale sirului: "))     # citirea lui n

        verificare(N)               # apelul functiei de verificare

        e_palindrom(N)              # apelul functiei de rezolvare

    except ValueError:              # daca apare eroare din cauza datelor de intrare afisam mesajul
        print("Datele introduse nu corespund restricțiilor impuse.")