Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 409 Solved: 38
[Submit][Status][Web Board]Description
两只青蛙在一个点,但是他们想要来个久别胜新婚的约会,于是他们出发,朝同一个方向绕圈跳,我们求出他们相遇的时间
Input
输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两组正整数,用空格隔开。每组包含两个正整数,表示跳n圈需要的秒数(1/2,表示跳2圈要1秒),用'/'隔开。
Output
对于每组测试数据, 输出它们的下次相遇时间,如果相遇周期是整数则用整数表示,否则用最简分数表示。
Sample Input
2 1/2 3/4 3/4 6/7
Sample Output
3/2 6
【题意简化】
1.相遇的问题就是跟速度差有关啦~ a/b c/d 这样输入的,速度差=b/a - d/c,通分一下,然后求个倒数就是答案啦~
2.化成最简形式就是同时除以个最大公因数
3.注意:两个速度化简后相等的要写1秒相遇,我刚开始写0秒wa了。。。
【通过代码】
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#include <sstream>
#define mem(a,b) memset(a,b,sizeof(a))
#define cs cout<<"-----"<<endl;
using namespace std;
typedef long long ll;
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
int t,a,b,c,d;
scanf("%d",&t);
while(t--)
{
scanf("%d/%d %d/%d",&a,&b,&c,&d);
int f = abs(b*c-a*d);
if(!f) cout<<1<<endl;
else
{
if(a*c%f == 0) printf("%d\n",(a*c)/f);
else
{
int e = gcd(a*c,f);
printf("%d/%d\n",a*c/e,f/e);
}
}
}
return 0;
}