1062 最简分数 (20 分)

56 阅读1分钟

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;
}