HDU1713 相遇周期

题目描述比较坑爹:

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了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值