一个分数一般写成两个整数相除的形式: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
code:
1 #include <stdio.h> 2 3 int as(int a,int b) 4 { 5 int i = a>b?a:b; 6 while(i%a != 0||i%b != 0) 7 i++; 8 return i; 9 } 10 11 int bs(int a,int b) 12 { 13 int i = a<b?a:b; 14 int j = 2; // 6 9 15 for(;j <= i;j++) 16 { 17 if(a%j == 0&&b%j == 0) 18 return 1; 19 } 20 return 0; 21 } 22 23 int main() 24 { 25 int n1,n2,m1,m2,k,i; 26 scanf("%d/%d",&n1,&n2); 27 scanf("%d/%d%d",&m1,&m2,&k); 28 // 7/18 13/20 12 29 int a = as(n2,m2); 30 int b = as(a,k); 31 int n = n1*(b/n2); 32 int m = m1*(b/m2); 33 // 70/180 117/180; 34 if(n > m) 35 { 36 int tmp = n; 37 n = m; 38 m = tmp; 39 } 40 // printf("%d %d %d %d",a,b,n,m); 41 //70/12*15 42 int flag = 0; 43 for(i = n+1;i < m;i++) 44 { 45 if(i%(b/k) == 0 && bs(k,i/(b/k)) == 0) 46 { 47 if(flag != 0) 48 printf(" "); 49 printf("%d/%d",(i/(b/k)),k); 50 flag = 1; 51 } 52 53 } 54 55 }