CSP历年复赛题-P2118 [NOIP2014 普及组] 比例简化

原题链接:https://www.luogu.com.cn/problem/P2118

题意解读:给定a、b,将其简化为a'/b',a'、b'互质,且a'/b'>=a/b,a'/b'-a/b最小

解题思路:

枚举a'、b'的所有可能组合,因为都小于l,所以枚举时间可控

判断a'、b'的最大公约数是否为1,如果是1,再计算double x = a'/b'-a/b

如果x>=0并且x < ans,则ans = x,同时记录a',b'

最后输出结果

需要注意小数的运算要将int转为double。

100分代码:

#include <bits/stdc++.h>
using namespace std;

int a, b, l;
double minx = 1e9;
int a2, b2;

int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b, a % b);
}

int main()
{
    cin >> a >> b >> l;
    for(int i = 1; i <= l; i++)
    {
        for(int j = 1; j <= l; j++)
        {
            if(gcd(i, j) == 1)
            {
                double x = 1.0 * i / j - 1.0 * a / b;
                if(x >= 0 && x < minx)
                {
                    minx = x, a2 = i, b2 = j;
                } 
            }
        }
    }
    cout << a2 << " " << b2;

    return 0;
}

 

posted @ 2024-06-03 22:36  五月江城  阅读(114)  评论(0编辑  收藏  举报