题意:
给a,l,求n,d<=l,使|a-n/d|最小。
分析:
两个需要枚举的变量,由于两个变量有依赖关系,可采取“追赶法”,能在O(n)时间解决问题。
代码:
//poj 1650
//sep9
#include <iostream>
#include <cmath>
using namespace std;int main()
{int n,d,ansn,ansd,l;double a,minx,now,tmp;while(scanf("%lf%d",&a,&l)==2){n=1,d=1,minx=9999999.9;while(n<=l&&d<=l){double p=a-(double)n/d;tmp=fabs(p);if(tmp<minx){minx=tmp;ansn=n,ansd=d;}if(p<=0)++d;else++n;} printf("%d %d\n",ansn,ansd); }return 0;
}