题意:
求满足方程
p ∗ e−x + q ∗ sin(x) + r ∗ cos(x) + s ∗ tan(x) + t ∗ x*x + u = 0
的解x
思路:
这题用数学中在某区间求根的步骤+二分判断来写,比如区间【0,1】中有根,0与1 带入方程后所得的乘积就会小于0点点点
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
double p, q, r, s, t, u;
double Judge(double x){
return p*exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) + t*(x*x) + u;
}
int main() {
while (~scanf("%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u)){
double l = 0, r = 1,mid;
int ok = 1;
if (Judge(l)*Judge(r) > 0) {
ok = 0;
}
while (r - l > 10e-8) {
mid = (l + r) / 2;
if (Judge(l)*Judge(mid) > 0)
l = mid;
else
r = mid;
}
if (ok)
printf("%.4f\n", mid);
else
printf("No solution\n");
}
return 0;
}