POJ3039

来源:互联网 发布:大数据java开发工程师 编辑:程序博客网 时间:2024/06/03 13:18

分母从1到32767枚举,比较所得的新分式与分式的大小,再依次更新即可,注意是如何更新分子。。。

 

#include <iostream>#include <cstdio>#include <cmath>using namespace std;const int maxn=32767;int gcd(int a,int b){    int c;    if(a==0)    return b;    while(b!=0)    {        c=b;        b=a%b;        a=c;    }    return a;}int main(){    int i,x,y,l1,l2,minl,minr;       //l表示分子,r表示分母    double res,minv,tmp;    scanf("%d%d",&x,&y);    minv=2;                          //精度    res=double(x)/double(y);    for(i=1;i<=32767;i++)            //从1到32767枚举分母    {        tmp=double(x*i)/double(y);   //得到分子        l1=floor(tmp);        l2=l1+1;        if(fabs(double(l1)/double(i)-res)<minv && fabs(double(l1)/double(i)-res)>1e-12)        {            minv=fabs(double(l1)/double(i)-res);            minl=l1;            minr=i;        }        if(fabs(double(l2)/double(i)-res)<minv && fabs(double(l2)/double(i)-res)>1e-12)        {            minv=fabs(double(l2)/double(i)-res);            minl=l2;            minr=i;        }    }    int max=gcd(minl,minr);    minl/=max;    minr/=max;    printf("%d %d\n",minl,minr);    return 0;}


 

原创粉丝点击