1 solutions

  • 0
    @ 2025-3-3 16:27:11

    C++ :

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int i,a,b,x,y,m,n,q;
        double p,min=1;
        scanf("%d%d",&a,&b);
        for(i=2;i<=32767;i++)
        {
            p=(double)i*a/b;
            q=(int)p;
            if(fabs(p-q)<=1e-6)
                x=q-1;
            else if(p-q<=q+1-p)
                x=q;
            else
                x=q+1;                //四舍五入,加0.5会出现精度问题
            y=i;
            if(fabs((double)x/y-(double)a/b)<min)
            {
                min=fabs((double)x/y-(double)a/b);
                m=x;
                n=y;
            }
        }
        for(i=2;i<=32767;i++)
            if(m%i==0&&n%i==0)
            {
                m/=i;
                n/=i;
            }
            printf("%d %d",m,n);
            return 0;
    }
     
    
    • 1

    Information

    ID
    10131
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By