因为数据范围很小,这道题的基本思路就是枚举所有的A’和B’,找出最小的那个。
枚举需要满足下面两个条件
1.A’和B’互质
2.A’/B’的比例大于等于原来的比例,并且尽可能接近。
其实这里无需判断A’和B’互质。
我们使用反证法:如果存在一个A’和B’不互质,他们的公约数为c,但是他们除出来的比例是最接近原来比例的。
那么一定也存在(A’/c) / (B’/c) == A’/B’,并且我们需要求的的是满足条件的最小的两个数,所以我们根本不会取得后面互质的两个数。
也就是说我们最后不管如何都不可能取得的最接近原来比例的两个数是不互质的,因为如果这两个数不互质,那就存在比他们小的互质的数和他们的比例一样。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int A = input.nextInt();
int B = input.nextInt();
int L = input.nextInt();
double ori = (A + 0.0) / B;
int a = 0;
int b = 0;
double del = Double.MAX_VALUE;
for(int i = 1 ; i <= L ; i++){
for (int j = 1; j <=L; j++) {
double rem = a * 1.0 / b;
double cur = i * 1.0 / j;
if (cur >= ori && cur - ori < del){
del = cur - ori;
a = i;
b = j;
}
}
}
System.out.println(a +" " + b);
}
}