3928 - Abcd: Difference between revisions

From Bitnami MediaWiki
Adrian (talk | contribs)
Pagină nouă: == 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ț...
 
Adrian (talk | contribs)
No edit summary
Line 32: Line 32:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 3928 - abcd
# 3928 - abcd
def abcd():
def validare(num1, num2, num3, num4):
    num1 = int(input())
     # Daca datele sunt invalide v-om face raise la eroarea ValueError
    num2 = int(input())
    num3 = int(input())
     num4 = int(input())


     conditii = (
     conditii = (
Line 44: Line 41:
     )
     )


     if all(conditii):
     if not all(conditii):
         print("Datele de intrare corespund restricțiilor impuse")
         raise ValueError


        numere_div_3 = 0


        numere_div_3 += num2 // 3 - (num1 - 1) // 3
def abcd(num1, num2, num3, num4):
        numere_div_3 += num4 // 3 - (num3 - 1) // 3
    # 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


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


     else:
     print(numere_div_3)
        print("Nu au fost respectate cerintele impuse")




if __name__ == '__main__':
if __name__ == '__main__':
     abcd()
     # 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)


</syntaxhighlight>
</syntaxhighlight>

Revision as of 03:16, 14 May 2023

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 "Datele de intrare nu corespund restricțiilor 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

<syntaxhighlight lang="python" line>

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

</syntaxhighlight>