1797 - Sir Div 3

De la Universitas MediaWiki
Versiunea din 21 martie 2023 13:18, autor: Alexandra Leș (discuție | contribuții) (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...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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

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