杭电ACM--HDU-2053a/b+c/d和HDU-2504又见gcd

来源:互联网 发布:小米手环数据修改攻略 编辑:程序博客网 时间:2024/04/25 07:57

这两个题目都用到了求最大公约数的方法,进行调用


HDU   2054    又见gcd

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2504

题目:

Problem Description
有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b。若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c。
 

Input
第一行输入一个n,表示有n组测试数据,接下来的n行,每行输入两个正整数a,b。
 

Output
输出对应的c,每组测试数据占一行。
 

Sample Input
26 212 4
 

Sample Output
48


代码如下:

#include<iostream>using namespace std;int gcd(int x,int y){if(x<y) return gcd(y,x);if(y==0) return x;return gcd(y,x%y);}int main(){int n,a,b,c;while(cin>>n){while(n--){cin>>a>>b;c=b*2;//b*2是b的最小公倍数while(gcd(a,c)!=b){c+=b;//继续找b的倍数,直到符合条件为止}cout<<c<<endl;}}return 0;}


HDC   2503 a/b+c/d

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2503

题目:

Problem Description
给你2个分数,求他们的和,并要求和为最简形式。
 

Input
输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四个正整数a,b,c,d(0<a,b,c,d<1000),表示两个分数a/b 和 c/d。
 

Output
对于每组测试数据,输出两个整数e和f,表示a/b + c/d的最简化结果是e/f,每组输出占一行。
 
Sample Input
21 2 1 34 3 2 3
 

Sample Output
5 62 1



Sample Input
21 2 1 34 3 2 3
 

Sample Output
5 62 1


代码如下:
#include<iostream>using namespace std;int gcd(int x,int y)//求最大公约数{if(x<y) return gcd(y,x);if(y==0) return x;return gcd(y,x%y);}int main(){int t,a,b,c,d,e,f,s;while(cin>>t){while(t--){cin>>a>>b>>c>>d;s=gcd(b,d);//调用b,ds=b/s*d;//求b,d的最小公倍数,使分母相同都变为sa=s/b*a;c=s/d*c;e=a+c;//分母相同,分子相加f=s;//分子s=gcd(f,e);//调用f,ee/=s;//求最简分子分母f/=s;cout<<e<<" "<<f<<endl;}}return 0;}


 

Sample Input
21 2 1 34 3 2 3
 

Sample Output
5 62 1
Sample Input
21 2 1 34 3 2 3
 

Sample Output
5 62 1
0 0