《算法竞赛-训练指南》第二章-2.26_UVa 10341

来源:互联网 发布:福昕阅读器mac版 下载 编辑:程序博客网 时间:2024/04/30 09:01

这是一道纯解方程的题目,因为确定了范围,可以直接判断它的单调性。然后根据图像求解。

就注意这种单调性求解的题目一般都是要二分的。而因为double类型的一些缺点,并不想我们现实中那样。比如1就是1,在double型里面1可能是0.999999999999。注意这些就行了。另外就是二分的时候R-L尽量的小一些吧,因为越小答案就越精确。这个不一定就是保留到4位,你就1e-5就行,这是不一定的,稍微小一点时间上不会差太多,但是不这样答案就有可能错!切记。

贴出代码:

#include <stdio.h>#include <string.h>#include <math.h>#include <iostream>#include <string>using namespace std;const double eps = 1e-14;double p, q, r, s, t, u;double F(double x){return p * exp(-x) + q * sin(x) + r * cos(x) + s * tan(x) + t * x * x + u;}int main(){//printf("%lf", 1e-5);while (scanf("%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u) != EOF){double ans0 = F(0.0);if (ans0 < 0){printf("No solution\n");continue;}double ans1 = F(1.0);if (ans1 > 0){printf("No solution\n");continue;}double L = 0.0;double R = 1.0;while (R - L > 1e-7) //这里为什么要达到1e-7方就不得而知了!看来书上讲的到1e-5不靠谱啊、 {double mid = L + (R - L) / 2;if (F(mid) < 0){R = mid;}else{L = mid;}}printf("%.4lf\n", L);}//system("pause");return 0;}


原创粉丝点击