【题目描述】
【思路】
枚举 欧几里得定理
L在100以内,枚举 A′(a), B′(b)的所有组合,判断:
- a和b是否互质
- A / B <= a / b且a/b−A/B的值尽可能小
实际上不需要判断互质,因为a,b都是从 1开始枚举的,如果a,b不互质,那么一定存在最大公约数c,也就是说存在比a、b更小的数a/c和b/c满足。所以最后不管如何都不可能取得的最接近原来比例的两个数是不互质的,因为如果这两个数不互质,那就存在比他们小的互质的数和他们的比例一样
import java.io.*;
class Main{
/*
//判断a和b是否互质
public static boolean gcd(double a, double b){
if( b == 0) return a == 1.0;
return gcd(b, a % b);
}*/
public static void main(String args[]) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s[] = bf.readLine().split(" ");
double A = Double.parseDouble(s[0]), B = Double.parseDouble(s[1]), L = Double.parseDouble(s[2]);
double AA = A, BB = B;
double esp = Double.MAX_VALUE;
for(double a = 1; a <= L; a++)
for(double b = 1; b <= L; b++){
// A / B <= a / b ---> A * b <= B * a;
if( (A * b <= B *a) ){
//a/b−A/B的值尽可能小
if( a/b - A/B < esp){
esp = a/b - A/B;
AA = a;
BB = b;
}
}
}
System.out.println((int)AA + " "+ (int)BB);
}
}