1862 - CntCifKRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == 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. == Important == Soluţia propusă va conţ...
 
Cata (talk | contribs)
No edit summary
Line 10: Line 10:
După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2.
După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2.


== Important ==
== Explicație ==
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Această funcție primește un număr întreg pozitiv <code>n</code>, un număr întreg <code>k</code> și o listă <code>c</code> cu un element. Scopul său este de a număra numărul de cifre din numărul <code>n</code> care sunt mai mari sau egale cu <code>k</code>, și de a stoca această valoare în lista <code>c</code>.
 
Funcția primește parametrii <code>n</code>, <code>k</code> și <code>c</code>, iar lista <code>c</code> 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 <code>n</code> este un singur cifră și verifică dacă această cifră este mai mare sau egală cu <code>k</code>. Dacă este adevărat, valoarea stocată în lista <code>c</code> este crescută cu 1.
 
În caz contrar, se face o apelare recursivă a funcției, cu noul parametru <code>n</code> fără ultima cifră și aceleași valori pentru <code>k</code> și <code>c</code>. Apoi, funcția verifică dacă ultima cifră a lui <code>n</code> este mai mare sau egală cu <code>k</code>, și dacă este adevărat, valoarea stocată în lista <code>c</code> este crescută cu 1.
 
Astfel, după ce toate cifrele din numărul <code>n</code> au fost verificate, lista <code>c</code> conține numărul de cifre din numărul <code>n</code> care sunt mai mari sau egale cu <code>k</code>.


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python">
<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):
def cnt_cif(n, k, c):
     if n < 9:
     if n < 9:
Line 23: Line 38:
         if n % 10 >= k:
         if n % 10 >= k:
             c[0] += 1
             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>
</syntaxhighlight>

Revision as of 13:44, 6 April 2023

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>