1797 - Sir Div 3: Difference between revisions
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... |
No edit summary |
||
Line 3: | Line 3: | ||
'''(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. | '''(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 == | == Date de intrare == | ||
Programul citește de la tastatură numărul | Programul citește de la tastatură numărul '''n'''. | ||
== Date de ieşire == | == Date de ieşire == | ||
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 == | == Restricții și precizări == | ||
* 0 ⩽ n ⩽ 2.000.000.000 | |||
* 0 ⩽ | |||
== Exemplu == | == Exemplu == | ||
; Intrare | ; Intrare | ||
: 3 | : 3 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse | : Datele sunt introduse corect. | ||
: 2 | : 2 | ||
== Explicație == | == Explicație == | ||
Line 19: | Line 18: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def validare_date( | # Funcția verifică dacă numărul introdus este un număr întreg și se încadrează în intervalul specificat | ||
if not isinstance( | def validare_date(n): | ||
if not isinstance(n, int): | |||
return False | return False | ||
if not 0 <= | if not 0 <= n <= 2_000_000_000: | ||
return False | return False | ||
return True | return True | ||
def calc_suma_cifrelor( | # Funcția calculează suma cifrelor dintr-un număr dat | ||
def calc_suma_cifrelor(n): | |||
suma = 0 | suma = 0 | ||
while | while n > 0: | ||
suma += | suma += n % 10 # adaugă cifra din unități la sumă | ||
n //= 10 # elimină cifra din unități | |||
return suma | return suma | ||
def numere_divizibile_cu_3( | # 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 | termen = 0 | ||
for i in range(1, | for i in range(1, n + 1): | ||
termen = termen * 10 + i | termen = termen * 10 + i # adaugă cifra următoare la termenul curent | ||
if calc_suma_cifrelor(termen) % 3 == 0: | 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 | return nr | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n = input() | |||
try: | try: | ||
n = int(n) # încercăm să convertim numărul introdus într-un număr întreg | |||
except ValueError: | except ValueError: # dacă conversia nu reușește, afișăm un mesaj de eroare și încheiem programul | ||
print(" | 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> | </syntaxhighlight> |
Latest revision as of 16:05, 11 April 2023
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>