4209 - DifParImpar: Diferență între versiuni
Cata (discuție | contribuții) (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...) |
Cata (discuție | contribuții) 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>. | ||
== | == 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: | ||
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.")