1400 - E Palindrom: Difference between revisions
No edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 4: | Line 4: | ||
Programul citește de la tastatură numărul n, iar apoi n 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 == | ||
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 == | == Restricții și precizări == | ||
: 1 ≤ n ≤ 1000 | : 1 ≤ n ≤ 1000 | ||
Line 23: | Line 24: | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
# 1400 E Palindrom | # 1400 E Palindrom | ||
def verificare(nr_elem): | def verificare(nr_elem): | ||
Line 29: | Line 30: | ||
return True | return True | ||
else: | else: | ||
raise ValueError | |||
def e_palindrom(n): | def e_palindrom(n): | ||
frecventa = [] | frecventa = [] # avem nevoie de un vector de frecventa pentru a vedea de cate ori apare fiecare numar | ||
for i in range(10001): | for i in range(10001): # numerele introduse sunt mai mici de 10000 | ||
frecventa.append(0) | frecventa.append(0) | ||
for i in range(n): | for i in range(n): | ||
numar = int(input("Introduceti un numar: ")) | 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 | frecventa[numar] += 1 | ||
nr_impare = 0 | print("Datele introduse corespund restricțiilor impuse.") | ||
nr_impare = 0 # numaram cate numere apar de numar impar de ori | |||
for numar in frecventa: | for numar in frecventa: | ||
if numar % 2 == 1: | if numar % 2 == 1: | ||
nr_impare += 1 | nr_impare += 1 | ||
if nr_impare >= 2: | if nr_impare >= 2: # daca sunt mai mult de 2 numere atunci nu poate fi palindrom | ||
print("NU") | print("NU") | ||
return | return | ||
Line 54: | Line 59: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
N = int(input("Introduceti numarul de elemente ale sirului: ")) | try: | ||
N = int(input("Introduceti numarul de elemente ale sirului: ")) # citirea lui n | |||
verificare(N) # apelul functiei de verificare | |||
e_palindrom(N) | 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.") | print("Datele introduse nu corespund restricțiilor impuse.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 17:28, 2 May 2023
Cerința[edit | edit source]
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[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 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[edit | edit source]
- 1 ≤ n ≤ 1000
- cele n numere citite vor fi mai mici decât 10.000
Exemplu 1[edit | edit source]
- Intrare
- 5
- 5 2 3 3 5
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- DA
Exemplu 2[edit | edit source]
- Intrare
- 0
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 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.")
</syntaxhighlight>