您的位置:首页 > 其它

HDU 1713 相遇周期

2014-02-27 15:15 267 查看
题目大意:两飞船绕同一星球沿同一方向飞,知道它们各自的周期(转多少圈要多少天),求相遇周期。

题目分析:已知两飞船周期,求相遇周期,即为求两数的最小公倍数。输入的两个分数是飞船速度,要变成周期需倒过来看,接下来的任务就是求两个分数的最小公倍数了。和整数一样,分数的最小公倍数等于两数乘积除以它们的最大公约数。最大公约数的求法是 两数分子的最大公约数 / 两数分母的最小公倍数。

#include <stdio.h>
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n,q1,q2,t1,t2,g,q,x;
scanf("%d",&n);
while(n--)
{
scanf("%d/%d %d/%d",&q1,&t1,&q2,&t2);
g=gcd(q1,q2);
q=q1/g*q2;
t1*=q2/g;
t2*=q1/g;
g=gcd(t1,t2);
x=gcd(q,g);
q/=x;
g/=x;
if(g-1)printf("%d/%d\n",q,g);
else printf("%d\n",q);
}
return 0;
}
解法二:

__int64 gcd(__int64 n,__int64 m)
{
while(m)
{
__int64 k=n%m;
n=m;
m=k;
}
return n;
}

int main()
{
int T;
__int64 t1,q1,t2,q2,t;
scanf("%d",&T);
while(T--)
{
scanf("%I64d/%I64d %I64d/%I64d",&t1,&q1,&t2,&q2);//t天数,q圈数,根据答案推出题目说反了
//求分数的最小公倍数时,这两个分数一定要化简为最简形式
while(t=gcd(t1,q1),t!=1)
{
t1/=t;
q1/=t;
}
while(t=gcd(t2,q2),t!=1)
{
t2/=t;
q2/=t;
}
__int64 zi=t1*t2/gcd(t1,t2);//分子
__int64 mu=gcd(q1,q2);//分母
__int64 temp=gcd(zi,mu);
zi/=temp;
mu/=temp;
if(mu==1)//如果分母为1
printf("%I64d\n",zi);
else
printf("%I64d/%I64d\n",zi,mu);
}

return 520;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: