3928 - Abcd

De la Universitas MediaWiki

Cerința

Se dau numerele naturale num1, num2, num3 și num4 cu proprietatea că num1 < num2 < num3 < num4. Să se determine câte numere naturale divizibile cu 3 sunt în reuniunea de intervale [num1,num2] ∪ [num3,num4].

Date de intrare

Programul citește de la tastatură numerele naturale num1, num2, num3, num4.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse". În următorul rând se va afișa pe ecran numărul de numere naturale divizibile cu 3 din [num1,num2] ∪ [num3,num4].

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Nu au fost respectate cerintele impuse".

Restricții și precizări

  • 2 ⩽ num1 < num2 < num3 < num4 ⩽ 2000000000

Exemplu 1

Intrare
2
7
10
18
Ieșire
Datele de intrare corespund restricțiilor impuse
5


Exemplu 2

Intrare
1
7
10
18
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare

# 3928 - abcd
def validare(num1, num2, num3, num4):
    # Daca datele sunt invalide v-om face raise la eroarea ValueError

    conditii = (
        num1 >= 2, num2 > num1,
        num3 > num2, num4 > num3,
        num4 <= 2000000000
    )

    if not all(conditii):
        raise ValueError


def abcd(num1, num2, num3, num4):
    # Numarul de numere divizibile cu 3 din intervalul [num1, num2] 
    # este egal cu x-y, unde:
    #    x este numarul de numere divizibile cu 3 din intervalul [1, num2]
    #    y este numarul de numere divizibile cu 3 din intervalul [1, num1-1]
    #    x = num2 // 3
    #    y = (num1 - 1) // 3
    #
    # Acelasi principiu se foloseste si la intervalul [num3, num4]
    numere_div_3 = 0

    numere_div_3 += num2 // 3 - (num1 - 1) // 3
    numere_div_3 += num4 // 3 - (num3 - 1) // 3

    print(numere_div_3)


if __name__ == '__main__':
    # Citim de la tastatura numerele cerute
    num1 = int(input())
    num2 = int(input())
    num3 = int(input())
    num4 = int(input())

    # Verificam daca datele introduse sunt valide
    # daca nu afisam mesajul corespunsador
    try:
        validare(num1, num2, num3, num4)
    except ValueError:
        print("Nu au fost respectate cerintele impuse")
    else:
        print("Datele de intrare corespund restricțiilor impuse")

        abcd(num1, num2, num3, num4)