题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=601
这道题,我最先开始想的是用n*logn的算法
就是枚举n或者d,然后用二分去枚举另外一个数,取最小的哪一个值。可是怎么写也没有过
后来到网上看到了别人都是利用的追赶法来做的,我在纸上画了画,发现思维还是比较简单的,于是就自己动手敲了便,很轻松的就AC了。。
我的代码:
int main()
{
int l,n,d,ansn,ansd;
double a,min,now,kk;
while(scanf("%lf%d",&a,&l)!=EOF)
{
n=1,d=1,min=99999999;
while(n<=l&&d<=l)
{
kk=a-(double)n/d;
now=fabs(kk);
if(now<min)
{
min=now;
ansn=n;
ansd=d;
}
if(kk<=0)
d++;
else
n++;
}
printf("%d %d/n",ansn,ansd);
}
return 0;
}