码迷,mamicode.com
首页 > 其他好文 > 详细

追赶法

时间:2017-11-24 23:50:35      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:open   include   return   app   fabs   .cpp   name   des   等于   

【题目描述】近似整数(Approximation.cpp/c/pas) POJ 1650

给定一个浮点数A和一个整数L,求在范围[1,L]内的两个整数n和d,使得n/d能近似等于A,且使误差|A-n/d|最小。

【输入格式】

第一行为一个浮点数A,第二行为一个整数L。

【输出格式】

两个整数n和d。

【输入样例】

3.14159265358979

10000

【输出样例】

355 113

追赶法:不断比较得出minA-n/d),在n/d>Ad++,相反则n++,即基本的追赶问题。

#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
freopen("Approximation.in","r",stdin);
freopen("Approximation.out","w",stdout);
   int n=1,d=1;
   double a;
   int l;
   int ansa,ansb;
   double anssum=999999999.9999999;
   double sum;
   scanf("%lf%d",&a,&l);
   while(n<=l&&d<=l){
    sum=double(n*1.0/(d*1.0));
    if(fabs(a-sum)<anssum) {
            ansa=n,ansb=d;
            anssum=fabs(a-sum);
    }
    if(sum>a) d++;
    else n++;
   }
   printf("%d %d\n",ansa,ansb);
    return 0;
}

追赶法

标签:open   include   return   app   fabs   .cpp   name   des   等于   

原文地址:http://www.cnblogs.com/lmjer/p/7892558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!