poj 1079 Ratio

//poj 1079 Ratio /* 维护最小误差,枚举每个分母。注意两点: 1.输入可能可以约分,这个有案例 2.如果出现同分母两个分子都一样更精确,取分子大的 */ #include <iostream> #include <algorithm> #include <cmath> using namespace std; const int inf = 1<<28; int n,m; #define eps 0.0000000001 int gcd(int n,int m) { if (n<m) swap(n,m); int r; while (r=n%m) { n=m; m=r; } return m; } int main() { while (scanf("%d%d",&n,&m)!=EOF) { int g=gcd(n,m); n/=g,m/=g; double delta = inf*1.0,d; bool flag; for (int i=1;i<m;i++) { flag=false; int b=n*i/m; d=(double)n/m-(double)b/i; if( d<delta-eps) { delta=d; flag=true; } ++b; d=(double)b/i-(double)n/m; if (d<delta-eps || flag && fabs(d-delta)<eps) { delta=d; printf("%d/%d/n",b,i); } else if (flag) printf("%d/%d/n",b-1,i); } printf("%d/%d/n/n",n,m); } system("pause"); return 0; }

你可能感兴趣的:(System)