相遇周期
2016-03-15 14:56
260 查看
做这题时首先要知道一个假分数怎么化成最简分数,比如:a/b是一个假分数,设t=gcd(a,b),a=a/t,b=b/t,那么a/b就是一个最简单分数。还有,在求最小公倍数的时候,要注意a/t*b与(a*b)/t,是不一样的,我就是在这里wrong answer了 根据题意,分析可知这是求一个最小公倍数的,第一步是要把两个分数都化成最简化的分数,这里省略简化过程,直接根据我上面说的去简化就行,很容易的,所以简化出来即为 a/b,c/d;第二步是求这两个分数的最小公倍数,,,因为我也是刚开始做这类的题,感觉有点纠结,想了很久也没有特别容易的方法,所以看了下大神的思想,看懂之后还蛮简单的,就是先判断gcd(b,d)是否等于1,如果等于,那么直接求lcm(a,c)就行,因为他们分子已经没有可以约掉的了,否则,要求lcm(a,c)/gcd(b,d),约掉就行,接下来直接上代码:
#include<stdio.h> #include<math.h> int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int lcm(int a,int b) { return a/gcd(a,b)*b; } int main() { int t; int a,b,c,d; scanf("%d",&t); while(t--) { scanf("%d/%d %d/%d",&a,&b,&c,&d); int k,x; k=gcd(a,b); a=a/k;b=b/k; x=gcd(c,d); c=c/x;d=d/x; if(gcd(b,d)==1) { printf("%d\n",lcm(a,c)); } else { printf("%d/%d\n",lcm(a,c),gcd(b,d)); } } return 0; }
相关文章推荐
- 数据库软件开发工程
- Emmet:HTML/CSS代码快速编写神器(转载)
- percona-toolkit工具安装
- Node.js简介和安装
- Ubuntu系统下Nexus安装
- Git远程操作详解
- Java报表工具FineReport导出EXCEL的四种API
- Class Imbalance Problem
- IOS中Json解析的四种方法
- JAVA之希尔排序
- iTween基础之CameraFade(摄像机淡入淡出)
- Exchange 2010 Connectors
- cordova CDVViewController解析
- 创建请求集
- 用Python做数据分析
- 2016年03月15日__阶段测试__第七天
- NSMutableParagraphStyle与NSParagraphStyle的使用
- linux umask使用详解
- fsmc理解
- 【wenqi】重置Centos 7 Root密码