设为首页 加入收藏

TOP

强转是+0.01的习惯
2013-07-23 09:04:08 来源: 作者: 【 】 浏览:129
Tags:强转是 0.01 习惯

  愁啊,这精度问题真是让人不知所措啊,思路正确因为精度问题卡在那了,最初做题的时候double数据强转成int,

  直接转,后来随着做题,因为在强转的时候没有加0.01错了很多次,所以就养成了,强转是+0.01的习惯,而今天做的这个题目是必须不能加,加了就错,直接强转就可以了。

  [cpp]

  #include

  #include

  #include

  #define PI 3.1415926535898

  #define EQS 1e-7

  double a[11000];

  int n,m;

  int main()

  {

  double binary_search(double l,double r);

  int t,i;

  double res,max;

  scanf("%d",&t);

  while(t--)

  {

  scanf("%d %d",&n,&m);

  m++;

  for(i=0,max=0;i<=n-1;i++)

  {

  scanf("%lf",&a[i]);

  if(a[i]>max)

  {

  max=a[i];

  }

  }

  res=binary_search(0,max*max*PI);

  printf("%.4lf\n",res);

  }

  return 0;

  }

  int check(double mid)

  {

  int s=0,i;

  for(i=0;i<=n-1;i++)

  {

  s+=(int)(a[i]*a[i]*PI/mid);

  }

  if(s>=m)

  {

  return 1;

  }else

  {

  return 0;

  }

  }

  double binary_search(double l,double r)

  {

  int t;

  double mid;

  while(!(fabs(r-l)<=EQS))

  {

  mid=(r+l)/2.0;

  if(!check(mid))

  {

  r=mid;

  }else

  {

  l=mid;

  }

  }

  return l;

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇IPC机制之事件源码分析 下一篇如何只特化类的一个成员函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: