#include using namespace std; /* 由于 L 在100以内,因此可以枚举 A′,B′ 的所有组合,然后判断: (1)、A′,B′ 是否互质; (2)、A′B′ 是否大于等于 AB,并且最小 优化: 由于我们是从小到大枚举的每一个(A',B'),所以,如果gcd(A',B')>1时,那么,一定在前面枚举过(A'/d,B'/d).这两组的比值是相同的,面 后面我们的判断取最小的条件是x-X> A >> B >> L; int a, b; double mi = 1e9; for (int i = 1; i <= L; i++) for (int j = 1; j <= L; j++) { double x = i * 1.0 / j; double X = A * 1.0 / B; if (x >= X && x - X < mi) { mi = x - X; a = i, b = j; } } cout << a << ' ' << b << endl; return 0; }