PAT Basic Level 1062 最简分数(辗转相除法)
题目链接:点击查看
题目描述:
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。
输入输出:
输入
7/18 13/20 12
输出
5/12 7/12
题目分析:
如果输入的第一个分数比第二个分数大,则将两个分数进行交换。对于要求的指定分母的分数,我们先通过一个while循环,此分数大小置于输入的两分数之间,在用另一个while循环对两分数之间的分数进行是否为最简分数的判断,在判断时我们使用辗转相除法(欧几里得算法),如最大公因数为1,则两数互质,即为最简分数。详见如下代码。
代码:
#include<iostream>
using namespace std;
int gcd(int a,int b)
{return b==0?a:gcd(b,a%b);
}
int main()
{int n1,n2,m1,m2,k;scanf("%d/%d %d/%d %d",&n1,&m1,&n2,&m2,&k);if(n1*m2>n2*m1)//第一个分数比第二个分数大{swap(n1,n2);swap(m1,m2); } int numerator=1;//将分子初始化为1 int isFirst=0;//用来标识是否为第一次输出 while(n1*k>=m1*numerator)//将要求分数置于输入的两个分数之间 {numerator++;}while(m2*numerator<n2*k)//基本条件:比第二个分数小 {if(gcd(numerator,k)==1){isFirst==1?printf(" %d/%d",numerator,k):printf("%d/%d",numerator,k);isFirst=1;}numerator++; }return 0;
}
PAT Basic Level 1062 最简分数(辗转相除法)相关推荐
- PAT Basic level 1062 最简分数 (20分)
1062 最简分数 (20分) 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N1 /M1和 N2/M2 , ...
- PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)
PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20) http://www.patest.cn/contests/pat-b-practise/1034 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- 【题解】PAT (Basic Level) Practice (中文)
互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...
- PAT basic level 答案+解题思路+难点 (个人刷题记录)
PAT basic level 使用语言:C++ 仅记录一下自己刷题过程的心得体会 永远保持更新(期待更好的解法) 可能有些题没有(那就是我还没做出来,以后会更的!) 欢迎大家与我讨论交流√ 题目序列 ...
- 可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决)
可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决) c1, c2 = map(int,input().split( ...
- 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版
PAT (Basic Level) Practice (中文) 1001 害死人不偿命的(3n+1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一 ...
- 卡拉兹(Callatz)猜想,PAT(Basic Level) Practise NO.1001
PAT(Basic Level) Practise NO.1001 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半. 这样 ...
- PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分)
PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即T代表顶级:A代表甲级:B代表乙级: 第 ...
最新文章
- 这就是芬兰:先让全国1%的人学起AI!
- Ehcache学习笔记(一)基础入门
- photoshop切片的取消操作
- 关于一个局部变量未初始化引发的项目异常退出问题
- 【Python】Cookie 和 Session
- java用户里获取部门id_javaWeb开发,根据部门ID查询该部门和下属所有部门的ID集合...
- 他无一纸文凭,何以成为清华教授,被誉为“三百年才出一个的大师”?
- python特性 property_python之中特性(attribute)与属性(property)有什么区别?
- SpringBoot中AOP实现落地——Filter(过滤器)、Intercepter(拦截器)、Aspect(Spring AOP)
- Segmentation and Paging
- 是什么决定了创业的成败?
- SSH 无法远程登录问题的处理思路
- 【问题解决方案】anaconda-python在cmd-pip安装requests后依然提示No module named requests
- 破旧手机改造系列:最牛逼的行车记录仪
- rds是什么云模式_IaaS、PaaS、SaaS、DaaS都是什么?
- 中标麒麟linux配置网卡,中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程...
- linux保险箱软件,手机加密App哪个好?手机加密软件推荐
- vivoX80Pro和华为P50Pro哪个值得入手参数对比
- java groovy集成_java与Groovy的整合
- 记录一次docker基础操作错误Error response from daemon: You cannot remove a running container