1062 最简分数 (20 分)
题目链接
算法分析
一层循环,每一次都判断两件事情,一是范围是否介于二者之间,二是公约数是否为1.
代码实现
#include<bits/stdc++.h>
using namespace std;
int lcd(int a, int b){
if(a < b) swap(a, b);
if(a % b == 0) return b;
else return lcd(a - b, b);
}
int main(){
int a1, a2, b1, b2, k;
scanf("%d/%d %d/%d %d", &a1, &b1, &a2, &b2, &k);
double low = 1.0 * a1 / b1;
double upp = 1.0 * a2 / b2;
if(low > upp) swap(low, upp);
bool flag = 0;//用于格式化输出
for(int i = 1; 1.0 * i / k < upp; ++ i){
if(1.0 * i / k > low && lcd(i, k) == 1){
if(flag) printf(" ");
printf("%d/%d", i, k);
flag = 1;
}
}
return 0;
}