1797 - Sir Div 3: Difference between revisions

From Bitnami MediaWiki
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 natural ”'''numar'''.
Programul citește de la tastatură numărul '''n'''.
== Date de ieşire ==
== 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'''.
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 ==
* numar ∈ Ν
* 0 ⩽ n ⩽ 2.000.000.000
* 0 ⩽ numar ⩽ 2.000.000.000
== Exemplu ==
== Exemplu ==
; Intrare
; Intrare
: 3
: 3
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 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(numar):
# Funcția  verifică dacă numărul introdus este un număr întreg și se încadrează în intervalul specificat
     if not isinstance(numar, int):
def validare_date(n):
     if not isinstance(n, int):
         return False
         return False
     if not 0 <= numar <= 2_000_000_000:
     if not 0 <= n <= 2_000_000_000:
         return False
         return False
     return True
     return True


def calc_suma_cifrelor(numar):
# Funcția calculează suma cifrelor dintr-un număr dat
def calc_suma_cifrelor(n):
     suma = 0
     suma = 0
     while numar > 0:
     while n > 0:
         suma += numar % 10
         suma += n % 10 # adaugă cifra din unități la sumă
         numar //= 10
         n //= 10 # elimină cifra din unități
     return suma
     return suma


def numere_divizibile_cu_3(numar):
# Funcția calculează numărul de numere formate din cifre consecutive de la 1 la n, care sunt divizibile cu 3
     count = 0
def numere_divizibile_cu_3(n):
     nr = 0
     termen = 0
     termen = 0
     for i in range(1, numar + 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
             count += 1
             nr += 1 # incrementează numărul de numere divizibile cu 3
     return count
     return nr


if __name__ == '__main__':
if __name__ == '__main__':
     numar = input("Introduceti un numar intreg intre 0 si 2000000000: ")
     n = input()
 
     try:
     try:
         numar = int(numar)
         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("Nu ati introdus un numar intreg!")
         print("Datele nu corespund restricțiilor impuse.")
     else:
        exit()
        if validare_date(numar):
 
            print("Datele de intrare corespund restricțiilor impuse.")
     if validare_date(n): # dacă numărul este valid, afișăm mesajul de confirmare și numărul de numere divizibile cu 3
            print("Numerele divizibile cu 3 sunt:", numere_divizibile_cu_3(numar))
        print("\nDatele sunt introduse corect.\n")
        else:
        print(numere_divizibile_cu_3(n))
            print("Numarul introdus nu respecta restricțiile impuse.")
    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>

  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>