PAT 1062. 最简分数(20)
Posted 来一点音乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)的主要内容,如果未能解决你的问题,请参考以下文章