//这个题看你二分的对象了,
//二分范围最小的对象,效率会是最快的,
//题目里面可以二分的对象有几个,但他们的
//意义是相等的,只是精度不同,所以要保证
//精确,就要选取范围最小的对象,这样精度会最好..
代码如下:
View Code
//这个题看你二分的对象了,
//二分范围最小的对象,效率会是最快的,
//题目里面可以二分的对象有几个,但他们的
//意义是相等的,只是精度不同,所以要保证
//精确,就要选取范围最小的对象,这样精度会最好..
#include <iostream>
#include <cstring>
#include <algorithm>
#include <climits>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double EPS=1e-12;
const double PI=acos(-1.0);
int main()
{
//freopen("input.txt","r",stdin);
double L,n,C;
while(scanf("%lf %lf %lf",&L,&n,&C)!=EOF)
{
if(L<0 && n<0 && C<0)
break;
double LL=(1+n*C)*L;
double lo=0,hi=PI;
double mid;
while(lo<hi-EPS)
{
mid=(lo+hi)/2;
double r=LL/mid;
if(2*r*sin(mid/2)>L)
lo=mid;
else
hi=mid;
}
double r=LL/mid;
double res=r-sqrt(r*r-L*L/4);
printf("%0.3lf\n",res);
}
return 0;
}