题意:
给double 的a,int l,求int n,d<=l,使|a-n/d|最小。
//追赶法
#include<bits/stdc++.h>
#include<map>
using namespace std;
double f;
int L;
int main()
{
while(cin>>f>>L)
{
double min=999999999;
int n=1,d=1;
int ansn,ansd;
while(n<=L && d<=L)
{
double cha=f-(double)n/d;
if(min>fabs(cha))
{
min=fabs(cha);
ansd=d;
ansn=n;
}
if(cha>0)
n++;
else
d++;
}
printf("%d %d\n",ansn,ansd);
}
return 0;
}
#include<bits/stdc++.h>
#include<map>
using namespace std;
double f;
int L;
int main()
{
while(cin>>f>>L)
{
double min=999999999;
int ansn,ansd;
for(int i=1; i<=L; i++)
{
int j=(int)(i/f);
if(j>L)
continue;
double tmp=fabs(f-(double)i/j);
if(min>tmp)
{
min=tmp;
ansn=i;
ansd=j;
}
j++;
if(j>L)
continue;
tmp=fabs(f-(double)i/j);
if(min>tmp)
{
min=tmp;
ansn=i;
ansd=j;
}
}
printf("%d %d\n",ansn,ansd);
}
return 0;
}