2371 - Biliard

From Bitnami MediaWiki

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>