题目描述比较坑爹:
1、相遇指的同一点出发然后再次在同一点相遇(不过其实由卫星轨道不在同一平面上也可以想到)
2、圈数和天数描述反了。。。
题目要求的是最小相遇周期,给出b/a(b圈每a天) 、d/c(d圈每c天)。
相遇问题先令时间同步,于是:
有b*c/a*c d*a/a*c
又在同一点相遇意味着圈数是整数,于是:
求 b*c 和 d*a 的最大公约数 m
则 a*c/m 即为所求最小周期
注意从题目读入分数和最后求出的分数都要约成最简形式。
PS:感觉这种思路比较好理解,网路上那个分数的最小公倍数的思路不太懂= =,
#include<stdio.h>
__int64 Gcd(__int64 x,__int64 y)
{
return y==0 ? x:Gcd(y,x%y);
}
int main()
{
int t;
__int64 a,b,c,d;
scanf("%d",&t);
while(t--)
{
scanf("%I64d/%I64d",&a,&b);
scanf("%I64d/%I64d",&c,&d);
__int64 m=Gcd(a,b);
a/=m;b/=m;
m=Gcd(c,d);
c/=m;d/=m;
m=a*c;
b=b*c;
d=d*a;
__int64 n=Gcd(b,d);
__int64 r=Gcd(n,m);
n/=r;m/=r;
if(n==1)
printf("%I64d\n",m);
else
printf("%I64d/%I64d\n",m,n);
}
return 0;
}
用 int WA了