4320 - Cifre 22: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 29: Linia 29:


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def get_asociat_par(numar):
        cifre = [int(c) for c in str(numar)] # Creează o listă cu cifrele numărului
        cifre_pare = [c for c in cifre if c % 2 == 0] # Creează o listă cu cifrele pare
        cifre_impare = [c for c in cifre if c % 2 == 1] # Creează o listă cu cifrele impare
        if not cifre_pare: # Dacă nu există cifre pare
                return 0
        else:
                return int(''.join([str(c) for c in cifre_pare])) # Concatenează cifrele pare într-un șir și returnează numărul obținut
numere = int(input("Introduceți numărul de numere: "))
numere = int(input("Introduceți numărul de numere: "))


#Verificare restricție
if numere > 100:
if numere > 100:
    print("Datele nu au fost introduse corect.")
        print("Datele nu au fost introduse corect.")
else:
else:
    max_par = -1
        max_par = -1
    max_par_num = -1
        max_par_num = -1
for i in range(numere):
        numere_str = input("Introduceți cele " + str(numere) + " numere separate prin spații: ")
    num = int(input(f"Introduceți numărul {i+1}: "))
        lista_numere = [int(x) for x in numere_str.split()]
    # Eliminăm cifrele impare
        for num in lista_numere:
    ap = sterge_cifre_impare(num)
# Calculează asociatul par al numărului
    # Verificăm dacă numărul obținut are mai multe cifre pare decât maximul anterior
            ap = get_asociat_par(num)
    # sau are același număr de cifre pare, dar este mai mare numeric
# Verifică dacă asociatul par al numărului este mai mare decât maximul anterior
    if ap > max_par or (ap == max_par and num > max_par_num):
# sau are același asociat par, dar este mai mare numeric
        max_par = ap
            if ap > max_par or (ap == max_par and num > max_par_num):
        max_par_num = num
                    max_par = ap
       
                    max_par_num = num
 
print("Datele sunt introduse corect.")
print("Datele sunt introduse corect.")
print(max_par_num)
print(max_par_num)


</syntaxhighlight>
</syntaxhighlight>

Versiunea de la data 7 aprilie 2023 17:50

Sursă: [1]

Cerinţa

Se dă un șir cu numere numere naturale. Să se determine numărul din șir care are asociatul par maxim. Dacă există mai multe numere cu asociat par maxim se va determina numărul mai mare.

Date de intrare

Programul citește de la tastatură numărul numere, iar apoi numere numere naturale, separate prin spații.

Date de ieşire

Dacă datele sunt introduse corect, pe ecran se va afișa "Datele sunt introduse corect.", apoi se va afișa pe ecran valoarea cerută. în caz contrar, se va afișa pe ecran. "Datele nu au fost introduse corect.".

Restricții și precizări

  • numere ⩽ 100
  • cele numere numere sunt sunt mai mici decât 10^9

Exemplu

Intrare
5
19 410 1470 1256 70
Ieșire
1470

Explicație

Asociatul par al lui 19 este 0. Asociatul par al lui 410 este 40. Asociatul par al lui 1470 este 40. Asociatul par al lui 1256 este 26. Asociatul par al lui 70 este 0.

Valoarea maximă a asociatului par este 40. Există două numere care îl au pe 40 ca asociat par, dintre care este mai mare 1470.


Rezolvare

def get_asociat_par(numar):
        cifre = [int(c) for c in str(numar)] # Creează o listă cu cifrele numărului
        cifre_pare = [c for c in cifre if c % 2 == 0] # Creează o listă cu cifrele pare
        cifre_impare = [c for c in cifre if c % 2 == 1] # Creează o listă cu cifrele impare
        if not cifre_pare: # Dacă nu există cifre pare
                return 0
        else:
                return int(''.join([str(c) for c in cifre_pare])) # Concatenează cifrele pare într-un șir și returnează numărul obținut

numere = int(input("Introduceți numărul de numere: "))

if numere > 100:
        print("Datele nu au fost introduse corect.")
else:
        max_par = -1
        max_par_num = -1
        numere_str = input("Introduceți cele " + str(numere) + " numere separate prin spații: ")
        lista_numere = [int(x) for x in numere_str.split()]
        for num in lista_numere:
# Calculează asociatul par al numărului
            ap = get_asociat_par(num)
# Verifică dacă asociatul par al numărului este mai mare decât maximul anterior
# sau are același asociat par, dar este mai mare numeric
            if ap > max_par or (ap == max_par and num > max_par_num):
                    max_par = ap
                    max_par_num = num

print("Datele sunt introduse corect.")
print(max_par_num)