4209 - DifParImpar

From Bitnami MediaWiki
Revision as of 09:38, 6 April 2023 by Cata (talk | contribs)

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

<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):

   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.")

</syntaxhighlight>