//poj 3039
//sep9
//similar with poj 1650
#include <iostream>
#include <cmath>
using namespace std;
const int MAXX=32767;
int gcd(int x,int y)
{
return x%y==0?y:gcd(y,x%y);
}
int main()
{
int n,d,ansn,ansd,x,y;
double a,minx,now,tmp;
while(scanf("%d%d",&x,&y)==2){
n=1,d=1,minx=9999999.9;
a=(double)x/y;
while(n<=MAXX&&d<=MAXX){
double p=a-(double)n/d;
tmp=fabs(p);
int tn=n/gcd(n,d);
int td=d/gcd(n,d);
if(tmp<minx&&!(tn==x&&td==y)){
minx=tmp;
ansn=n,ansd=d;
}
if(p<=0)
++d;
else
++n;
}
printf("%d %d\n",ansn,ansd);
}
return 0;
}
poj 3039 Close Encounter “追赶法”搜索
最新推荐文章于 2018-07-25 21:03:14 发布