1062. 最简分数(20)

1062. 最简分数(20)

时间限制
400 ms
内存限制
65536 kB

一个分数一般写成两个整数相除的形式: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<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const double e=1e-6;
 5 int lcd(int a,int b){
 6     return a%b==0?b:lcd(b,a%b);
 7 }
 8 int main(){
 9     int n1,n2,m1,m2,k;
10     scanf("%d/%d %d/%d %d",&n1,&m1,&n2,&m2,&k);
11     double d1=1.0*n1*k/m1,d2=1.0*n2*k/m2;
12     if(d1>d2) swap(d1,d2);
13     int i=ceil(d1+e),j=floor(d2-e);
14     int notFirst=0;
15     for(;i<=j;i++){
16         if(lcd(i,k)==1){
17             if(notFirst++) printf(" ");
18             printf("%d/%d",i,k);
19         }
20     }
21     return 0;
22 } 
原文地址:https://www.cnblogs.com/Fresh--air/p/8570198.html