PAT 1062. 最简分数(20)

时间:2024-09-17 13:36:08

一个分数一般写成两个整数相除的形式: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

需注意:
一、两个分数的大小问题。
二、输出的是最简分数的形式。
 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
int huajian(int *a,int *b){
int a1 = *a;
int b1 = *b;
int temp;
while(b1){
temp = a1%b1;
a1 = b1;
b1 = temp;
}
if(a1!=){
return ;
}
else
return ;
}
int main(){
int n1,n2,m1,m2;
int k;
scanf("%d/%d",&n1,&m1);
scanf("%d/%d",&n2,&m2);
scanf("%d",&k);
int h = ;
int i = ;
int temp;
if(n1*m2>n2*m1){
temp = n2;
n2 = n1;
n1 = temp;
temp = m1;
m1 = m2;
m2 = temp;
}
huajian(&n1,&m1);
huajian(&n2,&m2);
int h1 = ;
while(h){
if(n1*k<i*m1){
if(n2*k>i*m2){
if(!huajian(&i,&k)&&h1){
h1 = ;
printf("%d/%d",i,k);
i++;
continue;
}
if(!huajian(&i,&k)){
printf(" %d/%d",i,k);
} }
else{
h = ;
}
}
i++;
}
}