3251 - Asociat Par: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Line 1: Line 1:
Sursă: [https://www.pbinfo.ro/probleme/3251/asociat-par]
Sursă: [https://www.pbinfo.ro/probleme/3251/asociat-par]
== Cerinţa ==
== Cerinţa ==
Se dau '''numar''' 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 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 '''numar''' 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.
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 ==
== Date de intrare ==
Programul citește de la tastatură numărul '''numar''', iar apoi '''numar''' 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 numărul '''citite''', reprezentând numărul de numere citite care au numărul asociat palindrom..
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 ==
== Restricții și precizări ==
* '''1 ⩽ numar ⩽100 '''
* '''1 ⩽ n ⩽100 '''
* cele '''numar''' numere citite vor fi mai mici decât 1.000.000.000
* cele '''n''' numere citite vor fi mai mici decât 1.000.000.000


== Exemplu ==
== Exemplu ==
Line 16: Line 16:
: 45456 474 201102 2352345 234
: 45456 474 201102 2352345 234
; Ieșire
; Ieșire
: Datele sunt introduse corect.
: 2
: 2
== Rezolvare ==
== Rezolvare ==


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#3251


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


numar = int(input("Introduceți numărul de numere: "))
def verifica_date(n, numere):
citite = 0
    for numar in numere:
        if numar >= 1000000000:
            return False
    return True


for i in range(numar):
def numere_cu_numar_par_asociat_palindrom(n, numere):
    x = input("Introduceți un număr: ")
    citite = 0
    even_digits = [digit for digit in x if int(digit) % 2 == 0]
    for i in range(n):
    even_num = int("".join(even_digits)) if even_digits else None
        x = str(numere[i])
    if even_num and este_palindrom(even_num):
        even_digits = [digit for digit in x if int(digit) % 2 == 0]
        citite += 1
        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.")


print(citite)




</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare ==
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'''.<br><br>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'''.<br><br>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ă.<br><br>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.

Revision as of 17:41, 28 April 2023

Sursă: [1]

Cerinţa

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

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

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

Exemplu

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

Rezolvare

<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

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.