1797 - Sir Div 3: Diferență între versiuni

De la Universitas 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...)
 
Fără descriere a modificării
 
Linia 3: Linia 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 ==  
Linia 19: Linia 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>

Versiunea curentă din 11 aprilie 2023 16:05

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 n.

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

  • 0 ⩽ n ⩽ 2.000.000.000

Exemplu

Intrare
3
Ieșire
Datele sunt introduse corect.
2

Explicație

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

Rezolvare

# 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.")