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 } 
原文地址:https://www.cnblogs.com/lolybj/p/6475906.html