4209 - DifParImpar: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerința == Scrieți funcția recursivă DifParImpar care primind ca parametru un număr natural <span style="color: red;">n</span>, returnează un număr întreg reprezentând diferența dintre numărul cifrelor pare și numărul celor impare. == Restricții și precizări == * <span style="color: red;">0 ≤ n ≤ 2.147.000.000</span> * Numele funcției este <span style="color: red;">DifParImpar</span>. * Se recomandă utilizarea recursivității în rezolvarea probleme...)
 
Fără descriere a modificării
Linia 9: Linia 9:
<span style="color: red;">DifParImpar(240) = 3</span> și <span style="color: red;">DifParImpar(21377) = -3</span>.
<span style="color: red;">DifParImpar(240) = 3</span> și <span style="color: red;">DifParImpar(21377) = -3</span>.


== Important ==
== Explicație ==
Soluția propusă va conține doar funcția cerută. Introducerea în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție, care vor duce la depunctarea soluției.
Funcția DifParImpar(n) are ca scop calcularea diferenței dintre suma cifrelor pare și suma cifrelor impare ale numărului dat n.
 
Dacă numărul dat n este 0, funcția returnează 0, altfel se extrage ultima cifră a numărului cu n % 10 și se verifică dacă este pară sau impară. În funcție de acest lucru, se adună 1 la suma cifrelor pare sau -1 la suma cifrelor impare. Apoi, funcția se apelează recursiv cu parametrul n // 10, adică fără ultima cifră a lui n.
 
Funcția se va opri și va returna suma finală a diferenței dintre suma cifrelor pare și impare atunci când numărul devine 0.


== Rezolvare ==
== Rezolvare ==
=== Varianta 1 ===
=== Varianta 1 ===
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_n(n):
    if isinstance(n, int) and n >= 0 and n <= 2147000000:
        return True
    else:
        return False
def DifParImpar(n):
def DifParImpar(n):
     if n == 0:
     if n == 0:
Linia 24: Linia 34:
         else:
         else:
             return -1 + DifParImpar(n // 10)
             return -1 + DifParImpar(n // 10)
def main():
    n = input("Introduceti un numar intreg intre 0 si 2.147.000.000: ")
    try:
        n = int(n)
        if validate_n(n):
            result = DifParImpar(n)
            if result > 0:
                print(f"Suma cifrelor pare din numarul {n} este mai mare decat suma cifrelor impare cu {result}.")
            elif result == 0:
                print(f"Suma cifrelor pare din numarul {n} este egala cu suma cifrelor impare.")
            else:
                print(f"Suma cifrelor impare din numarul {n} este mai mare decat suma cifrelor pare cu {abs(result)}.")
        else:
            print("Numarul introdus nu este valid.")
    except ValueError:
        print("Nu ati introdus un numar intreg.")
</syntaxhighlight>
</syntaxhighlight>

Versiunea de la data 6 aprilie 2023 09:38

Cerința

Scrieți funcția recursivă DifParImpar care primind ca parametru un număr natural n, returnează un număr întreg reprezentând diferența dintre numărul cifrelor pare și numărul celor impare.

Restricții și precizări

  • 0 ≤ n ≤ 2.147.000.000
  • Numele funcției este DifParImpar.
  • Se recomandă utilizarea recursivității în rezolvarea problemei. De asemenea, se recomandă să nu se folosească alte funcții suplimentare.

Exemplu

DifParImpar(240) = 3 și DifParImpar(21377) = -3.

Explicație

Funcția DifParImpar(n) are ca scop calcularea diferenței dintre suma cifrelor pare și suma cifrelor impare ale numărului dat n.

Dacă numărul dat n este 0, funcția returnează 0, altfel se extrage ultima cifră a numărului cu n % 10 și se verifică dacă este pară sau impară. În funcție de acest lucru, se adună 1 la suma cifrelor pare sau -1 la suma cifrelor impare. Apoi, funcția se apelează recursiv cu parametrul n // 10, adică fără ultima cifră a lui n.

Funcția se va opri și va returna suma finală a diferenței dintre suma cifrelor pare și impare atunci când numărul devine 0.

Rezolvare

Varianta 1

def validate_n(n):
    if isinstance(n, int) and n >= 0 and n <= 2147000000:
        return True
    else:
        return False

def DifParImpar(n):
    if n == 0:
        return 0
    else:
        ultima_cifra = n % 10
        if ultima_cifra % 2 == 0:
            return 1 + DifParImpar(n // 10)
        else:
            return -1 + DifParImpar(n // 10)

def main():
    n = input("Introduceti un numar intreg intre 0 si 2.147.000.000: ")
    try:
        n = int(n)
        if validate_n(n):
            result = DifParImpar(n)
            if result > 0:
                print(f"Suma cifrelor pare din numarul {n} este mai mare decat suma cifrelor impare cu {result}.")
            elif result == 0:
                print(f"Suma cifrelor pare din numarul {n} este egala cu suma cifrelor impare.")
            else:
                print(f"Suma cifrelor impare din numarul {n} este mai mare decat suma cifrelor pare cu {abs(result)}.")
        else:
            print("Numarul introdus nu este valid.")
    except ValueError:
        print("Nu ati introdus un numar intreg.")