1400 - E Palindrom: Difference between revisions

From Bitnami MediaWiki
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 ==
Programul va afișa pe ecran unul dintre mesajele DA sau NU.
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:
         return False
         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


    if verificare(N):
        verificare(N)               # apelul functiei de verificare
        print("Datele introduse corespund restricțiilor impuse.")
 
         e_palindrom(N)
         e_palindrom(N)             # apelul functiei de rezolvare
     else:
 
     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">

  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>