Биллиард C++

Биллиард представляет собой прямоугольник размерами M x N, где M и N – натуральные числа. Из верхней левой лузы вылетает шар под углом 45o к соседним сторонам. Лузы размещено только в углах биллиарда. Определите количество столкновений шара с бортами биллиарда, после которых он опять попадет в одну из луз, и номер лузы, в которую упадет шар. Считать, что трение отсутствует, столкновения абсолютно упругие, а шар - материальная точка.

Входные данные

   Во входной строке два числа M и N, 1 ≤ M, N ≤ 2000000000. Нумерация луз по часовой стрелке, начиная с левой верхней лузы, из которой вилетел шар, согласно рисунка. M - горизонтальная сторона биллиарда, N - вертикальная сторона биллиарда.

Выходные данные

   Два числа: количество отражений шара и номер лузы в которую упадет шар.

#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

long long NSD (long long a,long long b)
{while(a!=0 && b!=0)
if (a>b) a%=b;
else b%=a;
return a+b;
}
int main()
{
long long a,b,m,n,rez=0,l,k,luza,NSK;
cin>>a;
cin>>b;
m=(a/(NSD(a,b)));
n=(b/(NSD(a,b)));
NSK=(m/(NSD(m,n)))*n;
l=NSK/m;
k=NSK/n;
if ((l%2==0) )luza=4;
if ((k%2==0))luza=2;
if ((l%2==1) and (k%2==1))luza=3;
rez=l-1+k-1;
cout<<rez<<" "<<luza<<endl;
}

Назад

Повышение продаж с помощью веб-форм Разложение числа на простые множители Как качественный контент способствует продвижению сайта Как выбрать хостинг Как писать SEO-тексты? Что такое SEO оптимизация сайта


Хостинг

Есть решение которого нет на сайте? Пиши admin@devexe.top