4209 - DifParImpar: Difference between revisions
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... |
No edit summary |
||
Line 9: | Line 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>. | ||
== | == 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 == | == 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: | ||
Line 24: | Line 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> |
Revision as of 09:38, 6 April 2023
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>