3119 - Impare Bac
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
<syntaxhighlight lang="python" line="1" start="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)
</syntaxhighlight>