首页 > 代码库 > PAT 1062. 最简分数(20)
PAT 1062. 最简分数(20)
一个分数一般写成两个整数相除的形式: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
需注意:
一、两个分数的大小问题。
二、输出的是最简分数的形式。
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<ctype.h> 5 #include<math.h> 6 int huajian(int *a,int *b){ 7 int a1 = *a; 8 int b1 = *b; 9 int temp; 10 while(b1){ 11 temp = a1%b1; 12 a1 = b1; 13 b1 = temp; 14 } 15 if(a1!=1){ 16 return 1; 17 } 18 else 19 return 0; 20 } 21 int main(){ 22 int n1,n2,m1,m2; 23 int k; 24 scanf("%d/%d",&n1,&m1); 25 scanf("%d/%d",&n2,&m2); 26 scanf("%d",&k); 27 int h = 1; 28 int i = 1; 29 int temp; 30 if(n1*m2>n2*m1){ 31 temp = n2; 32 n2 = n1; 33 n1 = temp; 34 temp = m1; 35 m1 = m2; 36 m2 = temp; 37 } 38 huajian(&n1,&m1); 39 huajian(&n2,&m2); 40 int h1 = 1; 41 while(h){ 42 if(n1*k<i*m1){ 43 if(n2*k>i*m2){ 44 if(!huajian(&i,&k)&&h1){ 45 h1 = 0; 46 printf("%d/%d",i,k); 47 i++; 48 continue; 49 } 50 if(!huajian(&i,&k)){ 51 printf(" %d/%d",i,k); 52 } 53 54 } 55 else{ 56 h = 0; 57 } 58 } 59 i++; 60 } 61 }
PAT 1062. 最简分数(20)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。