uva 10341 二分搜索

来源:互联网 发布:绫野刚 知乎 编辑:程序博客网 时间:2024/05/29 18:13
#include <cstdio>#include <cmath>#define F(x) (p*exp(-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*(x)*(x)+u)const double eps = 1e-14;int main(int argc, char const *argv[]){int p, r, q, s, t, u;while (scanf("%d%d%d%d%d%d", &p, &q, &r, &s, &t, &u) == 6){double f0 = F(0), f1 = F(1);if (f1 > eps || f0 < -eps) printf("No solution\n");else{double x = 0, y = 1, m;for (int i = 0; i < 100; i++){m = x + (y - x) / 2;if (F(m) < 0) y = m; else x = m;}printf("%.4lf\n", m);}}return 0;}


  要求的跟是0~1之间, 而且这个方程是单调递减的,所以可以用二分来求根。

0 0
原创粉丝点击