4226 - Divizibil: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
No edit summary
Dragos1234 (talk | contribs)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4226/divizibil]
Sursa: [https://www.pbinfo.ro/probleme/4226/divizibil]
== Cerinţa ==
== Cerinţa ==
Urmărind traseul autobuzului și cunoscând câte persoane urcă și coboară la fiecare stație, să se afle:
Teodora vă roagă sa o ajutați cu intrebările si va recompenseaza cu 100 de puncte.
 
a) Numărul total de persoane care au urcat în autobuz, numărul total de persoane care au coborât din autobuz și numărul de persoane aflate în autobuz după terminarea traseului.
 
b) Știind că Alexandru se află la stația cu numărul de ordin '''x''', să se afle dacă autobuzul în care urmează să urce este aglomerat. Un autobuz este considerat aglomerat dacă în el se află cel puțin '''y''' persoane înainte să ajungă în stație.


== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numerele naturale '''n x y p''' și apoi n perechi de numere '''Xi''', '''Yi''' naturale care reprezintă numărul de persoane care au urcat, respectiv coborât la stația '''i'''.
Programul citește de la tastatură numărul t ce poate fi '''1''' sau '''2'''.
Dacă '''t''' este '''1''' se vor citi trei numere '''n''', '''c1''', '''c2''' cu semnificația din enunț.
Dacă '''t''' este '''2''' se vor citi patru numere n, '''c1''', '''c2''', '''c3''' cu semnificația din enunț.


== Date de ieșire ==  
== Date de ieșire ==  
Dacă p = 1, atunci se va rezolva numai cerința '''a)'''. În acest caz, se vor scrie pe aceeași linie 3 numere separate prin câte un spațiu, cu semnificația din enunț.
Programul va afișa pe ecran numărul '''ct''', reprezentând numărul cerut și mesajul "Datele introduse corespund cerintelor." În caz contrar programul va afișa mesajul "Datele introduse nu corespund cerintelor."
 
Dacă p = 2, atunci se va rezolva numai cerința '''b)'''. În acest caz, se va scrie pe prima linie '''DA''' dacă autobuzul este aglomerat, respectiv '''NU''' dacă autobuzul nu este aglomerat.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ⩽ '''n''' ⩽ 1000
* '''t''' poate fi '''1''' sau '''2'''
* 1 ⩽ '''x''' ⩽ n
* 1 ⩽ '''n''' ⩽ 1.000.000.000
* 1 ⩽ '''y''' ⩽ 10000
* 2 ⩽ '''c1, c2, c3''' ⩽ 9
* 0 ⩽ '''Xi, Yi''' ⩽ 2000
* oricare două cifre sunt prime intre ele


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 5 2 10 1  
: Introduceți cerința:
: 3 0
1
: 2 1
: Introduceți numărul total:
: 5 6
10
: 4 3
: Introduceți a:
: 3 1
2
: Introduceți b:
3
; Ieșire
; Ieșire
: 17 11 6
: Datele introduse corespund cerintelor.
: 3
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 5 2 10 2
: Introduceți cerința:
: 3 0
2
: 2 1
: Introduceți numărul total:
: 5 6
10
: 4 3
: Introduceți a:
: 3 1
3
: Introduceți b:
5
: Introduceți c:
7
; Ieșire
; Ieșire
: NU
: Datele introduse corespund cerintelor.
: 4
<br>
<br>


Line 62: Line 66:
def validate_cerinta(cerinta):
def validate_cerinta(cerinta):
     if cerinta not in [1, 2]:
     if cerinta not in [1, 2]:
         print("Cerinta trebuie sa fie 1 sau 2.")
         print("Datele introduse nu corespund cerintelor.")
         return False
         return False
     return True
     return True
Line 69: Line 73:
def validate_n(n):
def validate_n(n):
     if not 1 <= n <= 1000000000:
     if not 1 <= n <= 1000000000:
         print("n trebuie sa fie intre 1 si 1000000000.")
         print("Datele introduse nu corespund cerintelor.")
         return False
         return False
     return True
     return True
Line 76: Line 80:
def validate_variabila(variabila):
def validate_variabila(variabila):
     if not 2 <= variabila <= 9:
     if not 2 <= variabila <= 9:
         print("Variabila trebuie sa fie intre 2 si 9.")
         print("Datele introduse nu corespund cerintelor.")
         return False
         return False
     return True
     return True
Line 83: Line 87:
def validate_a_b_c(a, b, c):
def validate_a_b_c(a, b, c):
     if not all([is_prime(i) for i in [a, b, c]]):
     if not all([is_prime(i) for i in [a, b, c]]):
         print("Variabilele a, b si c trebuie sa fie prime intre ele.")
         print("Datele introduse nu corespund cerintelor.")
         return False
         return False
     return True
     return True
Line 97: Line 101:




def main():
if __name__ == '__main__':
     print("Introduceți cerința:")
     print("Introduceți cerința:")
     cerinta = int(input())
     cerinta = int(input())
     if not validate_cerinta(cerinta):
     if not validate_cerinta(cerinta):
         return
         exit()
     print("Introduceți numărul total:")
     print("Introduceți numărul total:")
     n = int(input())
     n = int(input())
     if not validate_n(n):
     if not validate_n(n):
         return
         exit()
     if cerinta == 1:
     if cerinta == 1:
         print("Introduceți a:")
         print("Introduceți a:")
Line 112: Line 116:
         b = int(input())
         b = int(input())
         if not all([validate_variabila(i) for i in [a, b]]):
         if not all([validate_variabila(i) for i in [a, b]]):
             return
             exit()
        if not validate_a_b_c(a, b, c):
            return
         rezultat = calculeaza_rezultatul(cerinta, n, a, b)
         rezultat = calculeaza_rezultatul(cerinta, n, a, b)
     elif cerinta == 2:
     elif cerinta == 2:
Line 124: Line 126:
         c = int(input())
         c = int(input())
         if not all([validate_variabila(i) for i in [a, b, c]]):
         if not all([validate_variabila(i) for i in [a, b, c]]):
             return
             exit()
         if not validate_a_b_c(a, b, c):
         if not validate_a_b_c(a, b, c):
             return
             exit()
         rezultat = calculeaza_rezultatul(cerinta, n, a, b, c)
         rezultat = calculeaza_rezultatul(cerinta, n, a, b, c)
     else:
     else:
         rezultat = n
         rezultat = n
     print("Rezultatul este:", rezultat)
     print("Datele introduse corespund cerintelor.\n",rezultat)


</syntaxhighlight>


main()
== Explicație rezolvare ==
Acesta este un program care primește de la utilizator o cerință și o serie de numere și apoi calculează și afișează un rezultat în funcție de cerință și numerele introduse.


Funcția principală a programului este '''calculeaza_rezultatul()''', care primește ca parametri o cerință și una sau trei variabile, a, b și c, în funcție de cerință. În funcție de cerință, programul efectuează diferite operații matematice pe numărul total n și pe variabilele a, b și c și calculează un rezultat.


</syntaxhighlight>
Celelalte funcții din program, cum ar fi '''validate_cerinta()''', '''validate_n()''', '''validate_variabila()''' și '''validate_a_b_c()''', sunt folosite pentru a valida input-ul utilizatorului și a asigura că acesta este corect și se află în limitele admise. Funcția '''is_prime()''' este utilizată pentru a verifica dacă o variabilă este primă.


== Explicație rezolvare ==
În cele din urmă, blocul '''if __name__ == "__main__"''' primește input-ul de la utilizator, validează datele introduse și apelează funcția '''calculeaza_rezultatul()''' pentru a calcula rezultatul cerut, apoi afișează rezultatul.

Latest revision as of 13:58, 12 May 2023

Sursa: [1]

Cerinţa[edit | edit source]

Teodora vă roagă sa o ajutați cu intrebările si va recompenseaza cu 100 de puncte.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul t ce poate fi 1 sau 2. Dacă t este 1 se vor citi trei numere n, c1, c2 cu semnificația din enunț. Dacă t este 2 se vor citi patru numere n, c1, c2, c3 cu semnificația din enunț.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul ct, reprezentând numărul cerut și mesajul "Datele introduse corespund cerintelor." În caz contrar programul va afișa mesajul "Datele introduse nu corespund cerintelor."

Restricţii şi precizări[edit | edit source]

  • t poate fi 1 sau 2
  • 1 ⩽ n ⩽ 1.000.000.000
  • 2 ⩽ c1, c2, c3 ⩽ 9
  • oricare două cifre sunt prime intre ele

Exemplul 1[edit | edit source]

Intrare
Introduceți cerința:

1

Introduceți numărul total:

10

Introduceți a:

2

Introduceți b:

3

Ieșire
Datele introduse corespund cerintelor.
3


Exemplul 2[edit | edit source]

Intrare
Introduceți cerința:

2

Introduceți numărul total:

10

Introduceți a:

3

Introduceți b:

5

Introduceți c:

7

Ieșire
Datele introduse corespund cerintelor.
4


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 4226

def calculeaza_rezultatul(cerinta, n, a=0, b=0, c=0):

   rezultat = n
   if cerinta == 1:
       rezultat = rezultat - (n // a) - (n // b)
       rezultat = rezultat + (n // (a * b))
   elif cerinta == 2:
       rezultat = rezultat - (n // a) - (n // b) - (n // c)
       rezultat = rezultat + (n // (a * b)) + (n // (b * c)) + (n // (a * c))
       rezultat = rezultat - (n // (a * b * c))
   return rezultat


def validate_cerinta(cerinta):

   if cerinta not in [1, 2]:
       print("Datele introduse nu corespund cerintelor.")
       return False
   return True


def validate_n(n):

   if not 1 <= n <= 1000000000:
       print("Datele introduse nu corespund cerintelor.")
       return False
   return True


def validate_variabila(variabila):

   if not 2 <= variabila <= 9:
       print("Datele introduse nu corespund cerintelor.")
       return False
   return True


def validate_a_b_c(a, b, c):

   if not all([is_prime(i) for i in [a, b, c]]):
       print("Datele introduse nu corespund cerintelor.")
       return False
   return True


def is_prime(n):

   if n < 2:
       return False
   for i in range(2, int(n**0.5)+1):
       if n % i == 0:
           return False
   return True


if __name__ == '__main__':

   print("Introduceți cerința:")
   cerinta = int(input())
   if not validate_cerinta(cerinta):
       exit()
   print("Introduceți numărul total:")
   n = int(input())
   if not validate_n(n):
       exit()
   if cerinta == 1:
       print("Introduceți a:")
       a = int(input())
       print("Introduceți b:")
       b = int(input())
       if not all([validate_variabila(i) for i in [a, b]]):
           exit()
       rezultat = calculeaza_rezultatul(cerinta, n, a, b)
   elif cerinta == 2:
       print("Introduceți a:")
       a = int(input())
       print("Introduceți b:")
       b = int(input())
       print("Introduceți c:")
       c = int(input())
       if not all([validate_variabila(i) for i in [a, b, c]]):
           exit()
       if not validate_a_b_c(a, b, c):
           exit()
       rezultat = calculeaza_rezultatul(cerinta, n, a, b, c)
   else:
       rezultat = n
   print("Datele introduse corespund cerintelor.\n",rezultat)

</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acesta este un program care primește de la utilizator o cerință și o serie de numere și apoi calculează și afișează un rezultat în funcție de cerință și numerele introduse.

Funcția principală a programului este calculeaza_rezultatul(), care primește ca parametri o cerință și una sau trei variabile, a, b și c, în funcție de cerință. În funcție de cerință, programul efectuează diferite operații matematice pe numărul total n și pe variabilele a, b și c și calculează un rezultat.

Celelalte funcții din program, cum ar fi validate_cerinta(), validate_n(), validate_variabila() și validate_a_b_c(), sunt folosite pentru a valida input-ul utilizatorului și a asigura că acesta este corect și se află în limitele admise. Funcția is_prime() este utilizată pentru a verifica dacă o variabilă este primă.

În cele din urmă, blocul if __name__ == "__main__" primește input-ul de la utilizator, validează datele introduse și apelează funcția calculeaza_rezultatul() pentru a calcula rezultatul cerut, apoi afișează rezultatul.