这个题有两个难点
1、解方程
图片大了点呵。。Retina屏的水果本就是不错!
这方程是超越方程,只有数值解,那怎么办呢?
2、二分单调性证明
证明如下:
上面的方程,另左边等于s,则可推得弧长s与h间关系如下:
绘制该函数图像如下:
可知该函数是随l和s单增的,故可用二分逼近。
上图是刚才那个超越方程的隐函数围道图像,也可证明。
另提供几何证明(为什么h越大s越大,可以利用二分来逼近这h在给定s下的最大值)
下面是代码:
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
#define eps 1e-5
int main() {
double L, n, c, s;
double h;
double r;
while (cin >> L >> n >> c) {
if (L < 0 && n < 0 && c < 0)
break;
double low = 0.0;
double high = 0.5 * L;
double mid;
s = (1 + n * c) * L;
while (high - low > eps) {
mid = (low + high) / 2;
r = (4 * mid * mid + L * L) / (8 * mid);
if (2 * r * asin(L / (2 * r)) < s)
low = mid;
else
high = mid;
}
h = mid;
cout << fixed << setprecision(3) << h << endl;
}
}