2805 - Duplicare

De la Universitas MediaWiki
Versiunea din 2 aprilie 2023 18:34, autor: Cuceu Andrei (discuție | contribuții) (Pagină nouă: ==Cerința== Subprogramul '''duplicare''' are un singur parametru, '''n''', prin care primește un număr natural '''(n∈[1,104))'''. Subprogramul furnizează, prin același parametru, numărul obținut din '''n''' prin inserarea, după fiecare cifră pară din scrierea lui, a unei cifre egale cu jumătate din aceasta. Scrieți definiția completă a subprogramului. ==Exemplu== Dacă '''n=2380''' după apel, '''n=2138400''', iar dacă '''n=35''' după apel, '''n=35'''....)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

Subprogramul duplicare are un singur parametru, n, prin care primește un număr natural (n∈[1,104)). Subprogramul furnizează, prin același parametru, numărul obținut din n prin inserarea, după fiecare cifră pară din scrierea lui, a unei cifre egale cu jumătate din aceasta.

Scrieți definiția completă a subprogramului.


Exemplu

Dacă n=2380 după apel, n=2138400, iar dacă n=35 după apel, n=35.


Important

Soluția propusă va conține definiția subprogramului cerut. 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 duplicare(n: int) -> int:
    """
    Inserează, după fiecare cifră pară din scrierea lui n, o cifră egală cu jumătatea acesteia.

    :param n: numărul natural de prelucrat (1 <= n < 10^4)
    :return: numărul obținut prin inserarea cifrelor
    """
    result = 0
    factor = 1

    while n > 0:
        cifra = n % 10
        n = n // 10

        if cifra % 2 == 0:
            result += cifra * factor
            factor *= 10
            result += (cifra // 2) * factor
            factor *= 10
        else:
            result += cifra * factor
            factor *= 10

    return result

if __name__ == '__main__':
    # Testăm subprogramul cu exemplele din enunț
    assert duplicare(2380) == 2138400
    assert duplicare(35) == 35

    # Testăm cazul în care n conține doar cifre impare
    assert duplicare(13579) == 13579

    # Testăm cazul în care n conține doar cifre pare
    assert duplicare(2468) == 222466688