3119 - Impare Bac
De la Universitas MediaWiki
Cerință
Subprogramul Impare are un singur parametru, n, prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui n cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra 1 se înlocuieşte cu cifra 0, cifra 3 cu cifra 2 etc.) și furnizează numărul obținut tot prin parametrul n.
Scrieți definiția completă a subprogramului.
Restricții de precizări
- ≤ n ≤ 1.000.000.000
- Numele funcției va fi Impare
- Funcția va primi un singur parametru, numărul n, iar la finalul funcției n va avea valoarea cerută.
Exemplu
Dacă n=235690, atunci, după apel, n=224680, iar dacă n=15690, atunci, după apel, n=4680.
Important
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Rezolvare
Rezolvare ver. 1
def Impare(n):
digits = [int(d) for d in str(n)] # obținem lista de cifre a numărului n
for i in range(len(digits)):
if digits[i] % 2 != 0: # dacă cifra este impară
max_even_digit = -1
for j in range(digits[i]-1, -1, -1): # căutăm cea mai mare cifră pară strict mai mică decât ea
if j % 2 == 0:
max_even_digit = j
break
if max_even_digit != -1: # dacă există o cifră pară mai mică decât cifra impară
digits[i] = max_even_digit # înlocuim cifra impară cu cea mai mare cifră pară mai mică decât ea
n = int(''.join(map(str, digits))) # reconstruim numărul cu cifrele modificate
# Exemplu de folosire a funcției
n = 235690
Impare(n)
print(n) # rezultatul afișat trebuie să fie 224680
# Funcția main pentru citirea de la tastatură și afișarea rezultatului
if __name__ == "__main__":
n = int(input("Introduceți un număr natural: "))
Impare(n)
print("Numărul cu cifrele impare înlocuite este:", n)