P2118 比例简化

#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y)
{
    if(y==0) return x;
    return gcd(y,x%y);
}
int main()
{
        int i,j,a,b,ansA,ansB,l;
        scanf("%d%d%d",&a,&b,&l);
        ansA=l;ansB=1;
        for(i=1;i<=l;i++)
                for(j=1;j<=l;j++)
                        if(gcd(i,j)==1&&i*b>=j*a&&i*ansB<j*ansA)
                        {
                                ansA=i;
                                ansB=j;
                        }
        printf("%d %d",ansA,ansB);
        return 0;
}

  

考虑一个分数frac{i}{j}ji

  1. 如果frac{i}{j}<frac{a}{b}ji<ba那么ii应当+1+1
  2. 如果frac{i}{j}gefrac{a}{b}jiba那么jj应当+1+1

初始时i=j=1i=j=1,i>ni>n或j>nj>n时停止(nn是题目中的ll)

ansans即为所有满足frac{i}{j}gefrac{a}{b}jibafrac{i}{j}ji的最小值

原文地址:https://www.cnblogs.com/--840-114/p/12712332.html