0370 - Sum Div K

De la Universitas MediaWiki

Sursa: [1]


Cerinţa

Se dau două numere naturale k și n și apoi n numere naturale. Calculaţi suma celor care au suma cifrelor divizibilă cu k.

Date de intrare

Programul citește de la tastatură numerele k și n, iar apoi n numere naturale, separate prin spaţii.

Date de ieșire

Programul afișează pe ecran numărul S, reprezentând rezultatul cerut.

Restricţii şi precizări

  • 1 ≤ n ≤ 100
  • 1 ≤ k ≤ 10
  • cele n numere citite vor avea cel mult 7 cifre

Exemplu

Intrare
3 5
480 725 72 1698 56
Ieșire
2250

Explicație

Sunt 3 numere pentru care suma cifrelor se divide cu 3. Acestea sunt: 480 72 1698, iar suma lor este 2250.

Rezolvare

Rezolvare ver. 1

def citeste_k_n():
    while True:
        try:
            k = int(input("Introduceti k: "))  # citim k-ul de la tastatura
            n = int(input("Introduceti n: "))  # citim numarul de elemente de la tastatura
            if k < 1 or k > 10 or n < 1 or n > 100:  # validam k-ul si n
                raise ValueError("k trebuie sa fie intre 1 si 10, iar n trebuie sa fie intre 1 si 100")
            return k, n
        except ValueError as e:
            print(e)

def valideaza_numar(numar):
    if numar < 0 or numar > 9999999:  # validam numarul
        raise ValueError("Numarul trebuie sa fie pozitiv si sa aiba cel mult 7 cifre")

def calculeaza_suma_cifrelor_divizibile(k, n):
    suma = 0  # initializam suma cu 0
    for i in range(n):
        while True:
            try:
                numar = int(input(f"Introduceti numarul {i+1}: "))  # citim numarul de la tastatura
                valideaza_numar(numar)
                break  # iesim din while daca am introdus un numar valid
            except ValueError as e:
                print(e)  # afisam mesajul de eroare

        if sum(int(digit) for digit in str(numar)) % k == 0:  # verificam daca suma cifrelor este divizibila cu k
            suma += numar  # adaugam numarul la suma

    return suma

if __name__ == '__main__':
    k, n = citeste_k_n()
    suma = calculeaza_suma_cifrelor_divizibile(k, n)
    print("Suma este:", suma)

Rezolvare ver. 2

# citirea k-ului si a numarului de elemente
while True:
    try:
        k = int(input("Introduceti k: "))  # citim k-ul de la tastatura
        n = int(input("Introduceti n: "))  # citim numarul de elemente de la tastatura
        if k < 1 or k > 10 or n < 1 or n > 100:  # validam k-ul si n
            raise ValueError("k trebuie sa fie intre 1 si 10, iar n trebuie sa fie intre 1 si 100")
        break  # iesim din while daca am introdus valori valide pentru k si n
    except ValueError as e:
        print(e)  # afisam mesajul de eroare

# citirea si suma elementelor
suma = 0  # initializam suma cu 0
for i in range(n):
    while True:
        try:
            x = int(input(f"Introduceti numarul {i+1}: "))  # citim numarul de la tastatura
            if x < 0 or x > 9999999:  # validam numarul
                raise ValueError("Numarul trebuie sa fie pozitiv si sa aiba cel mult 7 cifre")
            break  # iesim din while daca am introdus un numar valid
        except ValueError as e:
            print(e)  # afisam mesajul de eroare

    if sum(int(digit) for digit in str(x)) % k == 0:  # verificam daca suma cifrelor este divizibila cu k
        suma += x  # adaugam numarul la suma

# afisarea sumei
print("Suma este:", suma)  # afisam suma rezultata