3073 - Repartitie: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Enunț == Într-o școală sunt '''nr_clase_7''' clase a VII-a, fiecare de câte '''elevi_clasa_7''' elevi, și '''nr_clase_8''' clase a VIII-a, fiecare de câte '''elevi_clasa_8''' elevi. Directorul școlii vrea să facă o nouă repartizare a elevilor în clase astfel încât în fiecare clasă: a) să fie același număr de elevi; b) să fie doar elevi de clasa a VII-a sau doar elevi de clasa a VIII-a. == Cerinţa == Cunoscându-se valorile '''nr_clase_7''', '''elevi_cl...
 
No edit summary
Line 14: Line 14:
: 4 30 5 27
: 4 30 5 27
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 17 8 9 15
: 17 8 9 15
== Explicație ==  
== Explicație ==  

Revision as of 10:36, 11 April 2023

Enunț

Într-o școală sunt nr_clase_7 clase a VII-a, fiecare de câte elevi_clasa_7 elevi, și nr_clase_8 clase a VIII-a, fiecare de câte elevi_clasa_8 elevi. Directorul școlii vrea să facă o nouă repartizare a elevilor în clase astfel încât în fiecare clasă: a) să fie același număr de elevi; b) să fie doar elevi de clasa a VII-a sau doar elevi de clasa a VIII-a.

Cerinţa

Cunoscându-se valorile nr_clase_7, elevi_clasa_7, nr_clase_8 și elevi_clasa_8, numere naturale nenule, scrieți un program pentru a determina nr_clase_necesare numărul de clase necesar acestei noi repartizări, noul număr nr_clase_repartizate_7 de clase a VII-a, respectiv nr_clase_repartizate_8 de clase a VIII-a, precum și numărul nr_elevi_repartizati maxim de elevi repartizați într-o clasă.

Date de intrare

Programul citește de la tastatură numerele naturale nr_clase_7, elevi_clasa_7, nr_clase_8 și elevi_clasa_8, separate prin spații.

Date de ieşire

Programul va afișa pe ecran numerele naturale: nr_clase_necesare, nr_clase_repartizate_7, nr_clase_repartizate_8, nr_elevi_repartizati, separate prin câte un spațiu.

Restricții și precizări

  • nr_clase_7, elevi_clasa_7, nr_clase_8 și elevi_clasa_8 ∈ Ν
  • 1 ⩽ nr_clase_7, elevi_clasa_7, nr_clase_8, elevi_clasa_8, nr_clase_necesare, nr_clase_repartizate_7, nr_clase_repartizate_8, nr_elevi_repartizati ⩽ 1.000.000.000

Exemplu1

Intrare
4 30 5 27
Ieșire
Datele de intrare corespund restricțiilor impuse.
17 8 9 15

Explicație

Pentru nr_clase_7=4, elevi_clasa_7=30, nr_clase_8=5, elevi_clasa_8=27, numărul de clase necesar acestei noi repartizări este nr_clase_necesare=17, dintre care vor fi nr_clase_repartizate_7=8 clase a VII-a și nr_clase_repartizate_8=9 clase a VIII-a, iar în fiecare clasă vor fi repartizați maxim nr_elevi_repartizati=15 elevi.

Rezolvare

<syntaxhighlight lang="python" line> def validare_date(nr_clase_7, elevi_clasa_7, nr_clase_8, elevi_clasa_8):

   if 0 <= int(nr_clase_7) <= 1_000_000 and 0 <= int(elevi_clasa_7) <= 1_000_000 \
           and 0 <= int(nr_clase_8) <= 1_000_000 and 0 <= int(elevi_clasa_8) <= 1_000_000:
       return True
   return False


def cmmdc(nr_elevi_7, nr_elevi_8):

   while nr_elevi_8:
       r = nr_elevi_7 % nr_elevi_8
       nr_elevi_7 = nr_elevi_8
       nr_elevi_8 = r
   return nr_elevi_7


def calculare_repartizare(nr_clase_7, elevi_clasa_7, nr_clase_8, elevi_clasa_8):

   nr_elevi_7 = nr_clase_7 * elevi_clasa_7
   nr_elevi_8 = nr_clase_8 * elevi_clasa_8
   nr_elevi_repartizati = cmmdc(nr_elevi_7, nr_elevi_8)
   nr_clase_repartizate_7 = nr_elevi_7 // nr_elevi_repartizati
   nr_clase_repartizate_8 = nr_elevi_8 // nr_elevi_repartizati
   nr_clase_necesare = nr_clase_repartizate_7 + nr_clase_repartizate_8
   print(nr_clase_necesare, nr_clase_repartizate_7, nr_clase_repartizate_8, nr_elevi_repartizati)


if __name__ == '__main__':

   nr_clase_7, elevi_clasa_7, nr_clase_8, elevi_clasa_8 = map(int, input().split())
   if validare_date(nr_clase_7, elevi_clasa_7, nr_clase_8, elevi_clasa_8):
       print("\nDatele de intrare corespund restrictiilor impuse.\n")
       calculare_repartizare(nr_clase_7, elevi_clasa_7, nr_clase_8, elevi_clasa_8)
   else:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>