题目来源:poj 1905
参考:https://blog.csdn.net/lyy289065406/article/details/6648562
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-5;
double cal(double l, double x)
{
double r = (4 * x * x + l * l) / (8 * x);
double s = 2 * r * asin(l / (2 * r));
return s;
}
double solve(double l, double n, double c)
{
double value1 = (1 + n * c) * l;
double left = 0;
double right = l / 2;
double mid;
while (right - left > eps)
{
mid = (left + right) / 2;
if (cal(l, mid) > value1)
{
right = mid; //往左子区间[left,mid]继续逼近
}
else
{
left = mid; //往右子区间[mid,right]继续逼近
}
}
return mid;
}
int main()
{
double l, n, c;
while (cin >> l >> n >> c)
{
if (l < 0 && n < 0 && c < 0)
{
break;
}
double h = solve(l, n, c);
cout << fixed << setprecision(3) << h << endl;
}
return 0;
}