题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1282
题意:给定一个方程,求在所给常数值下,在[0,1]区间内是否有解,解的值为多少
思路:方程在[0,1]区间内单调递减,二分就好了。至于判断是否有解,可以借助零点定理,如果在0 1点出的值异号,或者都等于0,那么有解
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e2 + 5;
const int INF = 0x3f3f3f3f;
int n, x[MAXN], y[MAXN];
int p, q, r, s, t, u;
double val(double x) {
return 1.0*p * exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) + t*pow(x, 2) + u;
}
int main() {
while (~scanf("%d %d %d %d %d %d", &p, &q, &r, &s, &t, &u)) {
if (val(0)*val(1) > 1e-9) {
printf("No solution\n");
continue;
}
double l = 0, r = 1;
while (r - l > 1e-9) {
double m = (r + l) / 2;
double v = val(m);
if (v < 1e-9) {
r = m;
}
else {
l = m;
}
}
printf("%.4lf\n", l);
}
return 0;
}