UVA - 654 Ratio

题目大意:给出 a 和 b,找出一个序列,要求分母 i 由 1 到 b,分子 u 是所有可能的分子中 u / i 最接近 a / b 的,然后将中的一些项删除,保证所 u / i 是越来越接近 a / b 的。

解题思路:暴力枚举分母i,分子 u = i * a / b (四舍五入),然后维护一个标准,保证是接近的。

#include <cstdio>
#include <cmath>

int main() {
    int a, b, T = 0;
    while (scanf("%d%d", &a, &b) != EOF) {
        if (T++) puts("");
        double ans = 1.0 * a / b;
        double tmp = 0x3f3f3f3f;
        for (int i = 1; i <= b; i++) {
            int x = ans * i + 0.5;
            if (fabs(ans - 1.0 * x / i) < tmp) {
                tmp = fabs(ans - 1.0 * x / i);
                printf("%d/%d\n", x, i);
            }
        }
    }
    return 0;
}

你可能感兴趣的:(UVA - 654 Ratio)