2221 - Cifre 003

De la Universitas MediaWiki

Sursă: [1]

Cerinţa

Se dă un număr natural n. Să se afle câte dintre numerele obținute din n prin ștergerea unei cifre, sunt divizibile cu 3.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieşire

Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul va afișa numărul numerelor obţinute din n prin ștergerea unei cifre, care sunt divizibile cu 3. În caz contrar, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".

Restricții și precizări

  • 1 ⩽ n ⩽2.000.000.000
  • dacă n are o cifră, prin ştergerea unei cifre el devine 0
  • dacă prin ştergerea unei cifre numărul rămas începe cu 0, zerourile de la început se elimină

Exemplu

Intrare
23701
Ieșire
"Datele introduse sunt corecte."
2

Explicație

Prin eliminarea cifrei 1 se obţine numărul 2370 divizibil cu 3, iar prin eliminarea cifrei 7 se obţine 2301 divizibil cu 3.

Rezolvare

def este_numar_valid(numar):
    if numar.isdigit() and int(numar) >= 1 and int(numar) <= 2000000000:
        return True
    return False

def numar_divizibile_cu_3(numar):
    numere_divizibile_cu_3 = 0
    for i in range(len(numar)):
        cifra = int(numar[i])
        numar_fara_cifra = numar[:i] + numar[i + 1:]
        if int(numar_fara_cifra) % 3 == 0:
            numere_divizibile_cu_3 += 1
    return numere_divizibile_cu_3

if __name__ == '__main__':
   numar = int(input("Introduceti numarul: ").strip())
    if este_numar_valid(numar):
        print("Datele introduse sunt corecte.")
        print(numar_divizibile_cu_3(int(numar)))
    else:
        print("Datele introduse nu sunt corecte.")

Explicație rezolvare

Funcția este_numar_valid(numar) verifică dacă numar este un număr natural valid, adică este format doar din cifre și este în intervalul [1, 2000000000]. Dacă numărul este valid, funcția returnează True, altfel returnează False.

Funcția numar_divizibile_cu_3(numar) primește ca parametru un număr și determină câte dintre numerele obținute prin ștergerea unei cifre sunt divizibile cu 3. Aceasta folosește o buclă for pentru a itera prin fiecare cifră din numar, elimină cifra curentă și verifică dacă numărul obținut este divizibil cu 3. Dacă acesta este divizibil cu 3, funcția incrementează un contor numere_divizibile_cu_3. Funcția returnează numărul de numere divizibile cu 3.

Funcția principală primește un număr de la utilizator folosind funcția input(). Aceasta verifică dacă numărul este valid folosind funcția este_numar_valid(numar). Dacă numărul este valid, se afișează un mesaj de confirmare și numărul de numere divizibile cu 3 prin apelul funcției numar_divizibile_cu_3(numar). Dacă numărul nu este valid, se afișează un mesaj de eroare.