P3382 【模板】三分法

这是一道版子题

一开始看了别人的博客,知道三分方法

后来自己实现

交了两次,全WA。原因是系数定义成了int......唉样例竟然过了

第三次就全AC了

没啥思维含量,不过学到了 fabs() 和 判断精度

今天xmz问我一本通的

1058:求一元二次方程

也用到了精度判断

三分代码

 

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#define precision 1e-12

using namespace std;

int n ;
double a , b , l , r,xi[15];

double f(double x)
{
  double x0 = 1;
  double ans = 0;
  for (int i = 0 ; i <= n ; i++)
  {
    x0 = 1;
    int j = i;
    while (j--)
    {
      x0 *= x;
    }
    x0 *= xi[i];
    ans += x0;
  }
  //cout << " " << x << " " << ans << endl;
  return ans;
}

int main()
{
   cin >> n;
  cin >> a >> b;
  for (int i = n ; i >= 0 ; i--)
  {
    cin >> xi[i];
  }
  l = a , r = b;
  while (l < r)
  {
    if(fabs(r - l) < precision)
      break;
    double thi1 = l + (r - l) / 3;
    double thi2 = l + (r - l) / 3 * 2; 
    //cout << l << " " << thi1 << " " << thi2 << " " << r << endl;
    if(f(thi1) < f(thi2))
    {
      l = thi1;
      //cout << "left" << endl;
    }

    else
    {
      r = thi2;
      //cout << "right" << endl;
    }    
  }
  printf ("%.5lf\n" , l);
  return 0;
}

 

posted @ 2020-01-17 23:30  _Buffett  阅读(149)  评论(0编辑  收藏  举报