12/13,27/18,20/45,22/33。谁是最简分数

一个分数一般写成两个整数相除的形式:N/M,其中M不为0。最简分数是指分子和分母没有公约数的分数表示形式。
现给定两个不相等的正分数 N1/M1&和 N2/M2,要求你按从小到大的顺序列出它们之间分母为K的最简分数。
输入格式:
输入在一行中按N/M的格式给出两个正分数,随后是一个正整数分母K,其间以空格分隔。题目保证给出的所有整数都不超过1000。
输出格式:
在一行中按N/M的格式列出两个给定分数之间分母为K的所有最简分数,按从小到大的顺序,其间以1个空格分隔。行首尾不得有多余空格。题目保证至少有1个输出。
输入样例:
7/18 13/20 12
输出样例:
5/12 7/12刚开始绕了一大圈,想着是先通分,在一一遍历查找即求M1,M2,K三数的最小公倍数Tn,然后用变量tmp = Tn/K来判断符合条件的数并存入数组中使用qsort输出,结果是超时加测试点3,4错误只得了13分;后来参考了姑娘的代码后找到了另一种简便思路:两次while循环,第一次loop寻找K的正整数倍刚好大于左端点的那个值记录为cnt;第二次loop则是在cnt/K & N2/M2的范围下寻找符合题意的数并且输出,实现的方法是利用gcd函数,(如果两个数之间的最大公约数为1的话,则说明两数字组成的分数为最简形式)两个坑:1.题目没说输入的第一个分数一定比第二个小    2.找左端点的时候一定不要忽略掉N1/M1本身
1 #include&stdio.h&
2 #include&stdlib.h&
4 //int cmp(const void *a, const void *b)
return *(int *)a - *(int *)b;
9 int gcd(int a, int b)
<span style="color: # {
<span style="color: #
if(b == <span style="color: #)
<span style="color: #
<span style="color: #
<span style="color: #
return gcd(b,a%b);
<span style="color: # }
<span style="color: #
<span style="color: # void swap(int *a, int *b)
<span style="color: # {
<span style="color: #
*a = *a ^ *b;
<span style="color: #
*b = *a ^ *b;
<span style="color: #
*a = *a ^ *b;
<span style="color: # }
<span style="color: # int main()
<span style="color: # {
<span style="color: #
int N1,N2,M1,M2,K;
<span style="color: #
scanf("%d/%d %d/%d %d",&N1,&M1,&N2,&M2,&K);
<span style="color: #
if(N1*M2 & N2*M1)
<span style="color: #
<span style="color: #
swap(&N1,&N2);
<span style="color: #
swap(&M1,&M2);
<span style="color: #
<span style="color: #
int cnt = <span style="color: #;
<span style="color: #
while(N1*K &= cnt*M1)//找出遍历左端点 ,注意等号(1号坑)
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
int flag = <span style="color: #;//cnt*M1 & K*N1 此条件不用写
<span style="color: #
<span style="color: #
while( cnt*M2 & K*N2)
<span style="color: #
<span style="color: #
if(gcd(cnt,K) == <span style="color: #)//最小公倍数为1,即可说明a,b两数之间无约数;
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
printf(" ");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
flag = <span style="color: #;
<span style="color: #
<span style="color: #
printf("%d/%d",cnt,K);
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: #
阅读(...) 评论()扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
把下列数化为最简分数80/28= 58/29= 90/45= 16/12= 12/9= 12/4= 20/5= 14/4= 21/9=请快点回答,现在必用,请务必加快速度!
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
20/7 2/1 2/1 4/3 4/3 3/1 4/1 7/2 7/3
为您推荐:
其他类似问题
扫描下载二维码查看: 362|回复: 9
sunny101973
63/36=7/4, 3/6=1/2, 20/5=4, 34/17=2, 36/78=6/13, 93/31=3, 15/5=3, 35/7=5, 39/26=3/2, 85/15=17/3, 65/26=5/2
一、把下面各小数化成分数,能约分的要约成最简分数。 0.6 =6/10=3/50....一班:36÷90=36/90=2/5二班:24÷90=24/90=4/15三班:30÷90=30/90=...
12分之4=3分之1 15分之3=5分之1 21分之14=3分之2 32分之24=4分之3 65分之13=5分之1 36分之27=4分之3 40分之30=4分之3 77分之4=77分之4(如果是77分之44的话,那就=7分之4)
3/4 2/3 12/5 9/4 3/4 5/8 点一下右上角的采纳,肯定我的劳动成果哦,谢谢
那:写出分子和分母的和是15的所有真分数;会么 1/14,2/13,4/11,7/8
15/28 谢谢!
与你桐花万里路
35、一件工作若完成它的2/5,用10小时,若完成它的3/5用(15)小时。36、约分是指一个不是最简真分数的分数(化成最简真分数)的过程。27、2.5小时=(2)小时...
二十二分之二和二十四分之三这两数都可化简,一个上下除2一个是3,2/22=1/11 3/24=1/8,分母相乘,1/11—8/88;1/8--11/88,ok 35/105看他们分子分母有没有公约数,有的话约去,这样就化简了,通分时找分母的最小公倍数,就行。7/25 6/7 5/2 6/7
(1)用2、4、8这三个数字组成最大的两位小数是(),把它化成最简分数是()。...网友都在找: 15分之36约分 63分之36约分 45分是几时? 约分与通分的方法 ...
扪心自问心
24分之15=八分之五 49分之28 =七分之四 65分之26 =五分之二 84分之24=七分之二 14分之6=七分之三 91分之39=七分之三 78分之9=二十六分之三 144分之36 =四分之一 250分之45=五十分之九 289分之51=十七分之三iOS 问题:关于AsyncSocket的问题, 求大神指点
// 服务端代码
@property (nonatomic, strong) AsyncSocket *
@interface RootViewController () -
关于AsyncSocket的问题, 求大神指点
// 服务端代码
@property (nonatomic, strong) AsyncSocket *
@interface RootViewController ()
登录后方可回答

我要回帖

更多关于 12岁小学生打扮20岁 的文章

 

随机推荐