求方程的根,可以看出该函数在区间[0, 1]内是减函数,二分就可以了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int 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()
{
freopen("in.txt", "r", stdin);
while(~scanf("%d %d %d %d %d %d", &p, &q, &r, &s, &t, &u))
{
if(f(0) * f(1) > 0) printf("No solution\n");
else
{
double lr = 0, rr = 1;
//cout << f(0) << " " << f(1) << "\n";
while(rr - lr > 1e-10)
{
double mid = (rr + lr) / 2;
if(f(mid) * f(rr) > 0) rr = mid;
else lr = mid;
}
printf("%.4lf\n", lr);
}
}
return 0;
}
/*
0 0 0 0 -2 1
1 0 0 0 -1 2
1 -1 1 -1 -1 1
0.7071
No solution
0.7554
*/