3251 - Asociat Par

From Bitnami MediaWiki

Sursă: [1]

Cerinţa[edit | edit source]

Se dau n numere naturale. Se numește număr par asociat unui număr x numărul obținut din cifrele pare ale lui x luate în ordinea în care apar ele în x. De exemplu, numărul 3246456 are ca număr par asociat pe 24646, iar 37030 pe 0. Dacă numărul nu are cifre pare, atunci el nu are număr par asociat. Numărul 3731 nu are număr par asociat. Se cere să se determine câte dintre cele n numere citite au numărul par asociat palindrom. Se numește palindom un număr care citit de la dreapta la stânga are aceeași valoare.

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 va afișa numărul c, reprezentând numărul de numere citite care au numărul asociat palindrom. În caz contrar, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".

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

  • 1 ⩽ n ⩽100
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu[edit | edit source]

Intrare
5
45456 474 201102 2352345 234
Ieșire
Datele introduse sunt corecte.
2

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3251

def este_palindrom(num):

   return str(num) == str(num)[::-1]

def verifica_date(n, numere):

   for numar in numere:
       if numar >= 1000000000:
           return False
   return True

def numere_cu_numar_par_asociat_palindrom(n, numere):

   citite = 0
   for i in range(n):
       x = str(numere[i])
       even_digits = [digit for digit in x if int(digit) % 2 == 0]
       even_num = int("".join(even_digits)) if even_digits else None
       if even_num and este_palindrom(even_num):
           citite += 1
   return citite

if __name__ == '__main__':

   n = int(input("Introduceți numărul de numere: "))
   numere = list(map(int, input("Introduceți cele {} numere: ".format(n)).split()))
   if verifica_date(n, numere):
       print("Datele introduse sunt corecte.")
       print(numere_cu_numar_par_asociat_palindrom(n, numere))
   else:
       print("Datele introduse nu sunt corecte.")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Funcția este_palindrom(num) primește un număr și returnează True dacă numărul este palindrom (adică poate fi citit în același fel în ambele direcții), altfel returnează False.

Funcția verifica_date(n, numere) primește un număr și o listă de numere și verifică dacă niciuna dintre numerele din listă nu este mai mare sau egală cu 1000000000. Dacă cel puțin un număr din listă este mai mare sau egal cu 1000000000, funcția returnează False. Dacă toate numerele sunt mai mici decât 1000000000, funcția returnează True.

Funcția numere_cu_numar_par_asociat_palindrom(n, numere) primește un număr și o listă de numere și returnează numărul de numere din listă care au un număr par asociat care este palindrom. Mai întâi, funcția transformă fiecare număr într-un șir de caractere, apoi extrage cifrele pare din fiecare șir și le transformă înapoi într-un număr. Dacă numărul obținut din cifrele pare este palindrom, acesta este numărat și funcția continuă la următorul număr din listă.

Funcția main() primește un număr și o listă de numere de la utilizator și apelează verifica_date(n, numere) pentru a verifica validitatea datelor introduse. Dacă datele sunt corecte, funcția afișează numărul de numere din listă care au un număr par asociat care este palindrom. Dacă datele nu sunt corecte, funcția afișează un mesaj de eroare.