1862 - CntCifKRec
Cerinţa
Să se scrie o funcție Python recursivă cu trei parametri n, k, c și întoarce prin parametrul c numărul de cifre ale lui n care sunt mai mari sau egale decât k.
Restricţii şi precizări
- Numele funcției va fi cnt_cif
- Funcția va avea trei parametri: n, k, c, cu semnificația de mai sus
- 0 ≤ n ≤ 2.000.000.000
- 0 ≤ k ≤ 9
Exemplu
După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2.
Explicație
Această funcție primește un număr întreg pozitiv n, un număr întreg k și o listă c cu un element. Scopul său este de a număra numărul de cifre din numărul n care sunt mai mari sau egale cu k, și de a stoca această valoare în lista c.
Funcția primește parametrii n, k și c, iar lista c trebuie să fie o listă cu un singur element, astfel încât valoarea numărătorului să poată fi stocată și accesată prin referință.
Funcția începe prin verificarea cazului de bază, adică cazul în care n este un singur cifră și verifică dacă această cifră este mai mare sau egală cu k. Dacă este adevărat, valoarea stocată în lista c este crescută cu 1.
În caz contrar, se face o apelare recursivă a funcției, cu noul parametru n fără ultima cifră și aceleași valori pentru k și c. Apoi, funcția verifică dacă ultima cifră a lui n este mai mare sau egală cu k, și dacă este adevărat, valoarea stocată în lista c este crescută cu 1.
Astfel, după ce toate cifrele din numărul n au fost verificate, lista c conține numărul de cifre din numărul n care sunt mai mari sau egale cu k.
Rezolvare
<syntaxhighlight lang="python"> def validate_input(n, k):
if not isinstance(n, int) or not isinstance(k, int):
return False
if not (0 <= n <= 2000000000) or not (0 <= k <= 9):
return False
return True
def cnt_cif(n, k, c):
if n < 9:
if n >= k:
c[0] += 1
else:
cnt_cif(n // 10, k, c)
if n % 10 >= k:
c[0] += 1
def main():
n = input("Introduceti n: ")
k = input("Introduceti k: ")
try:
n = int(n)
k = int(k)
if validate_input(n, k):
c = [0] # lista pentru a putea modifica valoarea in interiorul functiei
cnt_cif(n, k, c)
print(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}")
else:
print("Input invalid!")
except ValueError:
print("Input invalid!")
</syntaxhighlight>