4206 - CifDiv3Rec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == Cerinţa == Să se scrie o funcție Python recursivă care să returneze numărul cifrelor divizibile cu 3 ale unui număr natural n transmis ca parametru. == Restricţii şi precizări == * Numele funcției va fi CifDiv3Rec * Funcția va avea un parametru reprezentând numărul dat n * 0 ≤ n ≤ 2.000.000.000 == Exemplu == CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6. == Important == Soluţia propusă va conţine d...
 
Cata (talk | contribs)
No edit summary
Line 9: Line 9:
CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6.
CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6.


== 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.
Funcția <code>CifDiv3Rec</code> primește ca parametru un număr întreg pozitiv <code>n</code> și returnează numărul de cifre ale acestuia care sunt divizibile cu 3.
 
Funcția utilizează o abordare recursivă, în care se calculează cifra unităților a numărului <code>n</code> și se verifică dacă aceasta este divizibilă cu 3. Dacă este, se adaugă 1 la numărul de cifre divizibile cu 3 găsite până acum și se reapelează funcția pentru a verifica cifra următoare. În caz contrar, se reapelează funcția fără a adăuga 1 la numărul de cifre divizibile cu 3 găsite până acum.
 
Procesul continuă până când toate cifrele numărului <code>n</code> au fost verificate, moment în care se va returna numărul de cifre divizibile cu 3 găsite în total.


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_n(n):
    if isinstance(n, int) and n >= 0 and n <= 2_000_000_000:
        return True
    else:
        return False
def CifDiv3Rec(n):
def CifDiv3Rec(n):
     if n == 0:
     if n == 0:
Line 21: Line 31:
     else:
     else:
         return CifDiv3Rec(n // 10)
         return CifDiv3Rec(n // 10)
def main():
    n = input("Introduceți un număr întreg pozitiv: ")
    try:
        n = int(n)
        if validate_n(n):
            result = CifDiv3Rec(n)
            if result == 0:
                print("Nu există cifre divizibile cu 3 în numărul introdus.")
            else:
                print(f"Numărul de cifre divizibile cu 3 din numărul introdus este: {result}")
        else:
            print("Numărul introdus nu este valid.")
    except ValueError:
        print("Nu ați introdus un număr întreg.")
</syntaxhighlight>
</syntaxhighlight>

Revision as of 10:07, 6 April 2023

Cerinţa

Să se scrie o funcție Python recursivă care să returneze numărul cifrelor divizibile cu 3 ale unui număr natural n transmis ca parametru.

Restricţii şi precizări

  • Numele funcției va fi CifDiv3Rec
  • Funcția va avea un parametru reprezentând numărul dat n
  • 0 ≤ n ≤ 2.000.000.000

Exemplu

CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6.

Explicație

Funcția CifDiv3Rec primește ca parametru un număr întreg pozitiv n și returnează numărul de cifre ale acestuia care sunt divizibile cu 3.

Funcția utilizează o abordare recursivă, în care se calculează cifra unităților a numărului n și se verifică dacă aceasta este divizibilă cu 3. Dacă este, se adaugă 1 la numărul de cifre divizibile cu 3 găsite până acum și se reapelează funcția pentru a verifica cifra următoare. În caz contrar, se reapelează funcția fără a adăuga 1 la numărul de cifre divizibile cu 3 găsite până acum.

Procesul continuă până când toate cifrele numărului n au fost verificate, moment în care se va returna numărul de cifre divizibile cu 3 găsite în total.

Rezolvare

<syntaxhighlight lang="python"> def validate_n(n):

   if isinstance(n, int) and n >= 0 and n <= 2_000_000_000:
       return True
   else:
       return False

def CifDiv3Rec(n):

   if n == 0:
       return 0
   elif n % 10 % 3 == 0:
       return 1 + CifDiv3Rec(n // 10)
   else:
       return CifDiv3Rec(n // 10)

def main():

   n = input("Introduceți un număr întreg pozitiv: ")
   try:
       n = int(n)
       if validate_n(n):
           result = CifDiv3Rec(n)
           if result == 0:
               print("Nu există cifre divizibile cu 3 în numărul introdus.")
           else:
               print(f"Numărul de cifre divizibile cu 3 din numărul introdus este: {result}")
       else:
           print("Numărul introdus nu este valid.")
   except ValueError:
       print("Nu ați introdus un număr întreg.")

</syntaxhighlight>