3119 - Impare Bac

De la Universitas MediaWiki
Versiunea din 2 aprilie 2023 17:38, autor: Cuceu Andrei (discuție | contribuții) (Pagină nouă: ==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== *'''≤...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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)