2371 - Biliard

From Bitnami MediaWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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 a și b reprezentând lungimea respectiv lățimea mesei.

Date de ieşire

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numărul nrSchimb reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 1 ⩽ a ⩽ b ⩽ 10.000

Exemplu

Intrare
8 3
Ieșire
Datele sunt introduse corect.
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>

  1. Verificăm dacă datele introduse corespund restricțiilor impuse

def validare_date(a, b):

   if 1 <= a <= 10000 and 1 <= b <= 10000 and 1 <= min(a, b) <= max(a, b) <= 10000 and (max(a, b) - min(a, b)) <= 1000:
       return True
   return False
  1. Calculăm cel mai mare divizor comun dintre două numere.

def cmmdc(a, b):

   if b == 0:
       return a
   return cmmdc(b, a % b)

if __name__ == '__main__':

   lungime, lățime = map(int, input().split())
   n, m = lungime, lățime
   if validare_date(lungime, lățime):#Dacă datele introduse sunt corecte
       divizor_comun =cmmdc(lungime, lățime)
       # Calculăm cel mai mic multiplu comun al numerelor "lungime" și "lățime"
       cmmmc = (n // divizor_comun) * m
       print("\nDatele sunt introduse corect.\n")
       print(cmmmc // lungime + cmmmc // lățime - 2)
   else:
       print("Datele nu corespund restricțiilor impuse.")

</syntaxhighlight>