Hdu 1713 相遇周期

本文介绍了一种计算两颗卫星相遇周期的方法,通过简化输入数据并使用最大公约数和最小公倍数算法,最终以最简分数形式输出相遇周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
相遇周期
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2636 Accepted Submission(s): 1346
Problem Description
2007年3月26日,在中俄两国元首的见证下,中国国家航天局局长孙来燕与俄罗斯联邦航天局局长别尔米诺夫共同签署了《中国国家航天局和俄罗斯联邦航天局关于联合探测火星-火卫一合作的协议》,确定中俄双方将于2009年联合对火星及其卫星“火卫一”进行探测。

而卫星是进行这些探测的重要工具,我们的问题是已知两颗卫星的运行周期,求它们的相遇周期。
Input
输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两组正整数,用空格隔开。每组包含两个正整数,表示转n圈需要的天数(26501/6335,表示转26501圈要6335天),用’/’隔开。
Output
对于每组测试数据, 输出它们的相遇周期,如果相遇周期是整数则用整数表示,否则用最简分数表示。

Sample Input
2
26501/6335 18468/42
29359/11479 15725/19170
Sample Output
81570078/7
5431415

很扯淡的一道题。
AC代码:

#include<stdio.h>
int gcd(int a, int b){
    int x;
    x = a % b;
    while(x != 0){
        a = b;
        b = x;
        x = a % b;
    }
    return b;
}
int lcm(int a ,int b){
     return a / gcd(a, b) * b;  //先除后乘避免溢出
}
int main(){
    int t;
    scanf("%d", &t);
    while(t--){
        int a, b, c, d;
        scanf("%d/%d %d/%d", &a, &b, &c, &d);
        int temp1 = gcd(a, b);    //先进行约分
        a = a / temp1;
        b = b / temp1;
        int temp2 = gcd(c, d);   //先进行约分   
        c = c / temp2;
        d = d / temp2;
        int x = lcm(a, c);
        int y = gcd(b, d); 
        if(x % y == 0)
            printf("%d\n", x / y);
        else
            printf("%d/%d\n", x, y);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值