题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=601
这道题,我最先开始想的是用n*logn的算法
就是枚举n或者d,然后用二分去枚举另外一个数,取最小的哪一个值。可是怎么写也没有过
后来到网上看到了别人都是利用的追赶法来做的,我在纸上画了画,发现思维还是比较简单的,于是就自己动手敲了便,很轻松的就AC了。。
我的代码:
#include<stdio.h> #include<math.h> #define inf 99999999 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; }