2371 - Biliard: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Avem la dispoziție o masa de biliard dreptunghiulara. O bila pornește din colțul stânga jos al dreptunghiului sub un unghi de 45 grade față de latura de jos a dreptunghiului și lovește latura de sus sau latura din dreapta. Aici ricoșează (pornește spre o altă latură tot sub un unghi de 45 grade față de latura de care s-a lovit). Își continuă drumul până când ajunge într-un colț al dreptunghiului. Scrieți un program care calculează de c...
 
Line 6: Line 6:
Programul citește de la tastatură numerele '''numar1''' și '''numar2''' reprezentând lungimea respectiv lățimea mesei..
Programul citește de la tastatură numerele '''numar1''' și '''numar2''' reprezentând lungimea respectiv lățimea mesei..
== Date de ieşire ==
== Date de ieşire ==
PProgramul va afișa pe ecran numărul cerut.
Programul va afișa pe ecran numărul cerut.
 
== Restricții și precizări ==
== Restricții și precizări ==
* 1 ⩽ numar1 ⩽ numar2 ⩽ 10.000
* 1 ⩽ numar1 ⩽ numar2 ⩽ 10.000

Revision as of 11:49, 5 April 2023

Cerinţa

Avem la dispoziție o masa de biliard dreptunghiulara. O bila pornește din colțul stânga jos al dreptunghiului sub un unghi de 45 grade față de latura de jos a dreptunghiului și lovește latura de sus sau latura din dreapta. Aici ricoșează (pornește spre o altă latură tot sub un unghi de 45 grade față de latura de care s-a lovit). Își continuă drumul până când ajunge într-un colț al dreptunghiului.

Scrieți un program care calculează de câte ori (nrSchimb) mingea își schimbă direcția de mers până când se oprește într-un colț. Punctul de pornire nu se numără.

Date de intrare

Programul citește de la tastatură numerele numar1 și numar2 reprezentând lungimea respectiv lățimea mesei..

Date de ieşire

Programul va afișa pe ecran numărul cerut.

Restricții și precizări

  • 1 ⩽ numar1 ⩽ numar2 ⩽ 10.000

Exemplu

Intrare
8 3
Ieșire
Datele introduse corespund restricțiilor impuse.
9

Explicație

De 4 ori lovește latura de sus, o dată latura din stânga și din dreapta și de 3 ori latura de jos și intră în colțul dreapta-jos.

Rezolvare

<syntaxhighlight lang="python" line> def validare_date(numar1, numar2):

   if 1 <= numar1 <= 10000 and 1 <= numar2 <= 10000 and 1 <= min(numar1, numar2) <= max(numar1, numar2) <= 10000 and (max(numar1, numar2) - min(numar1, numar2)) <= 1000:
       return True
   return False

def gcd(numar1, numar2):

   if numar2 == 0:
       return numar1
   return gcd(numar2, numar1 % numar2)

if __name__ == '__main__':

   numar1, numar2 = map(int, input().split())
   n, m = numar1, numar2
   if validare_date(numar1, numar2):
      gcd_value = gcd(numar1, numar2)
      lcm_value = (n//gcd_value) * m
      print("\nDatele de intrare corespund restricțiilor impuse.\n")
      print(lcm_value//numar1 + lcm_value//numar2 - 2)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>