1797 - Sir Div 3

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă următorul şir de numere naturale: (1, 21, 321, 4321, 54321, 654321, 7654321, 87654321, 987654321, 10987654321, ...). Al x-lea termen este format prin alipirea primelor x numere naturale nenule. Determinaţi câte din primele n numere ale şirului sunt divizibile cu 3.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numărul c reprezentând câte din primele n numere din şir sunt divizibile cu 3..În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • 0 ⩽ n ⩽ 2.000.000.000

Exemplu[edit | edit source]

Intrare
3
Ieșire
Datele sunt introduse corect.
2

Explicație[edit | edit source]

Primele 3 numere sunt : 1, 21, 321. Din cele 3 numere doar 2 sunt divizibile cu 3. (21 si 321).

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Funcția verifică dacă numărul introdus este un număr întreg și se încadrează în intervalul specificat

def validare_date(n):

   if not isinstance(n, int):
       return False
   if not 0 <= n <= 2_000_000_000:
       return False
   return True
  1. Funcția calculează suma cifrelor dintr-un număr dat

def calc_suma_cifrelor(n):

   suma = 0
   while n > 0:
       suma += n % 10  # adaugă cifra din unități la sumă
       n //= 10  # elimină cifra din unități
   return suma
  1. Funcția calculează numărul de numere formate din cifre consecutive de la 1 la n, care sunt divizibile cu 3

def numere_divizibile_cu_3(n):

   nr = 0
   termen = 0
   for i in range(1, n + 1):
       termen = termen * 10 + i  # adaugă cifra următoare la termenul curent
       if calc_suma_cifrelor(termen) % 3 == 0:  # verifică dacă suma cifrelor este divizibilă cu 3
           nr += 1  # incrementează numărul de numere divizibile cu 3
   return nr

if __name__ == '__main__':

   n = input()
   try:
       n = int(n)  # încercăm să convertim numărul introdus într-un număr întreg
   except ValueError:  # dacă conversia nu reușește, afișăm un mesaj de eroare și încheiem programul
       print("Datele nu corespund restricțiilor impuse.")
       exit()
   if validare_date(n):  # dacă numărul este valid, afișăm mesajul de confirmare și numărul de numere divizibile cu 3
       print("\nDatele sunt introduse corect.\n")
       print(numere_divizibile_cu_3(n))
   else:  # dacă numărul nu este valid, afișăm un mesaj de eroare
       print("Datele nu corespund restricțiilor impuse.")


</syntaxhighlight>