1797 - Sir Div 3
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>
- 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
- 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
- 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>