1422. Table Tennis
2011-05-08 17:16 Min·zc 阅读(208) 评论(0) 编辑 收藏 举报假设球碰到横边或者总边都不会发生方向的改变,那么就相当于将球的路线完全展开来看,我们会发现,求横向和纵向行走的距离刚好都是横纵边长的最小公倍数。之后就可以求得横纵边各走了几个,每走一个就在相应的一条边发生了一次碰撞。原因如下:比如变长分别是2和3,最大公约数就是6,也就是说最终球进洞的时候横向和纵向都走了6个单位。但是实际横向边最长只有3,如果想继续前进,只能调头,所以发生了纵向边的碰撞。
最后根据横向和纵向碰撞的次数就可以确定最终的进洞是哪一个。因为最后进洞的时候横向和纵向的碰撞是不算的,所以需要各减少1
---------------------------------------------------------------------------------------------------------------------------
1 #include <iostream>
2 using namespace std;
3 int m,n;
4 int gcd(int a,int b)
5 {
6 if(b==0)
7 return a;
8 else
9 return gcd(b,a%b);
10 }
11 int main()
12 {
13 while(cin>>m>>n)
14 {
15 int x,y;
16 y=x=0;
17 int plu=gcd(m,n);
18 int ansx,ansy;
19 ansx=n/plu-1;
20 ansy=m/plu-1;
21 if(ansx%2==0&&ansy%2==0)
22 cout<<"C";
23 else if(ansx%2==1&&ansy%2==0)
24 cout<<"D";
25 else if(ansx%2==0&&ansy%2==1)
26 cout<<"B";
27 else if(ansx%2==1&&ansy%2==1)
28 cout<<"A";
29 cout<<" "<<ansx+ansy<<endl;
30 }
31 }
32