1062 最简分数 (20分)
一个分数一般写成两个整数相除的形式:/,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。
现给定两个不相等的正分数 / 和 /,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。
输入格式:
输入在一行中按 / 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。
输出格式:
在一行中按 / 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。
输入样例:
7/18 13/20 12
输出样例:
5/12 7/12思路:暴力法——将分子[1,k]之间的每一个进行判断1.是否在区间内2.是否为最简首次通过代码:

1 #include<stdio.h>
2 int gcd(int a,int b){
3 int i=a%b;
4 while(i!=0){
5 a=b;
6 b=i;
7 i=a%b;
8 }
9 return b>0?b:1;
10 }
11 int main(){
12 int a1,b1,a2,b2,k;
13 scanf("%d/%d %d/%d %d",&a1,&b1,&a2,&b2,&k);
14 int max_a,max_b,min_a,min_b;
15 if(a1*b2>a2*b1) {
16 max_a=a1;max_b=b1;
17 min_a=a2;min_b=b2;
18 }
19 else {
20 max_a=a2;max_b=b2;
21 min_a=a1;min_b=b1;
22 }
23 int sum=0;
24 for(int i=1;i<k;i++){
25 if(i*min_b-k*min_a>0&&i*max_b-k*max_a<0&&gcd(k,i)==1) {
26 sum++;
27 if(sum==1) printf("%d/%d",i,k);
28 else printf(" %d/%d",i,k);
29 }
30 }
31 return 0;
32 }
参考:辗转相除法求最大公约数FROM:https://baike.baidu.com/item/%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AE%97%E6%B3%95/1647675?fromtitle=%E8%BE%97%E8%BD%AC%E7%9B%B8%E9%99%A4%E6%B3%95&fromid=4625352&fr=aladdin
来源:https://www.cnblogs.com/a982961222/p/12365691.html
