2371 - Biliard
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>
- 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
- 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>