首页 > ACM题库 > HDU-杭电 > HDU 1713 相遇周期-数学相关-[解题报告] C++
2013
12-21

HDU 1713 相遇周期-数学相关-[解题报告] C++

相遇周期

问题描述 :

2007年3月26日,在中俄两国元首的见证下,中国国家航天局局长孙来燕与俄罗斯联邦航天局局长别尔米诺夫共同签署了《中国国家航天局和俄罗斯联邦航天局关于联合探测火星-火卫一合作的协议》,确定中俄双方将于2009年联合对火星及其卫星“火卫一”进行探测。

而卫星是进行这些探测的重要工具,我们的问题是已知两颗卫星的运行周期,求它们的相遇周期。

输入:

输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两组正整数,用空格隔开。每组包含两个正整数,表示转n圈需要的天数(26501/6335,表示转26501圈要6335天),用’/'隔开。

输出:

对于每组测试数据, 输出它们的相遇周期,如果相遇周期是整数则用整数表示,否则用最简分数表示。

样例输入:

2
26501/6335 18468/42
29359/11479 15725/19170

样例输出:

81570078/7
5431415

hdu1713   相遇周期                 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1713

数学水

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

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

以下是代码:

#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;
}

PS:水水更健康!

解题报告转自:http://blog.csdn.net/blogs_of_slicer/article/details/8622318


  1. simple, however efficient. A lot of instances it is difficult to get that a??perfect balancea?? among usability and appearance. I must say that youa??ve done a exceptional task with this. Also, the blog masses quite fast for me on Web explore.

  2. bottes vernies blanches

    I appreciate the efforts you men and women place in to share blogs on such sort of matters, it was certainly useful. Keep Posting!