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; }
相关文章推荐
- HDU 1713 相遇周期(求两个分数的最小公倍数)
- HDU-1713 相遇周期 LCD LCM
- HDU 1713 相遇周期
- HDU 1713 相遇周期
- HDU 1713 -相遇周期
- HDU-1713 相遇周期
- HDU 1713相遇周期(两个分数的lcm)
- HDU 1713 最小公倍数与最大公约数的问题 相遇周期
- HDU1713--相遇周期 HDU(110)
- HDU-1713 相遇周期
- 相遇周期 HDU - 1713
- HDU 1713 相遇周期
- HDU 1713 相遇周期 (最小公倍数)
- HDU 1713 相遇周期
- hdu 1713 相遇周期 (GCD & LCM)
- hdu1713相遇周期
- HDU 1713 相遇周期 — 欧几里得算法与最大公约数,最小公倍数
- HDU 1713 相遇周期【这也算数学吗?】
- HDU - 1713 相遇周期
- hdu 1713 相遇周期 比较绕的最大公约,最小公倍问题