1797 - Sir Div 3

From Bitnami MediaWiki
Revision as of 13:18, 21 March 2023 by Alexandra Leș (talk | contribs) (Pagină nouă: == Cerinţa == 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 == Programul citește de la tastatură numărul natural ”'''numar'''”. == Date de ieşire == Programul va afișa pe ecran numărul cerut, re...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

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

Programul citește de la tastatură numărul natural ”numar”.

Date de ieşire

Programul va afișa pe ecran numărul cerut, reprezentând câte din primele n numere din şir sunt divizibile cu 3.

Restricții și precizări

  • numar ∈ Ν
  • 0 ⩽ numar ⩽ 2.000.000.000

Exemplu

Intrare
3
Ieșire
Datele introduse corespund restricțiilor impuse.
2

Explicație

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

Rezolvare

<syntaxhighlight lang="python" line> def validare_date(numar):

   if not isinstance(numar, int):
       return False
   if not 0 <= numar <= 2_000_000_000:
       return False
   return True

def calc_suma_cifrelor(numar):

   suma = 0
   while numar > 0:
       suma += numar % 10
       numar //= 10
   return suma

def numere_divizibile_cu_3(numar):

   count = 0
   termen = 0
   for i in range(1, numar + 1):
       termen = termen * 10 + i
       if calc_suma_cifrelor(termen) % 3 == 0:
           count += 1
   return count

if __name__ == '__main__':

   numar = input("Introduceti un numar intreg intre 0 si 2000000000: ")
   try:
       numar = int(numar)
   except ValueError:
       print("Nu ati introdus un numar intreg!")
   else:
       if validare_date(numar):
           print("Datele de intrare corespund restricțiilor impuse.")
           print("Numerele divizibile cu 3 sunt:", numere_divizibile_cu_3(numar))
       else:
           print("Numarul introdus nu respecta restricțiile impuse.")

</syntaxhighlight>