简单题目,可以判断函数单调递减,用二分查找就行了。
#include <stdio.h>
#include <math.h>
void func(int p, int q, int r, int s, int t, int u)
{
double left, right, max, min;
double x, y;
x = 0.0;
max = p*exp(-1*x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x + u;
x = 1.0;
min = p*exp(-1*x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x + u;
if(0.0<min || 0.0>max)
{
printf("No solution\n");
return;
}
left = 0.0;
right = 1.0;
while(1)
{
x = (left+right)/2.0;
y = p*exp(-1*x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x + u;
if(fabs(y-0.0) <= 1e-6)
break;
if(y > 0)
left = x;
else
right = x;
}
printf("%.4lf\n", x);
}
int main(void)
{
int p, q, r, s, t, u;
//freopen("input.dat", "r", stdin);
while(scanf("%d %d %d %d %d %d",&p,&q,&r,&s,&t,&u) != EOF)
{
func(p, q, r, s, t, u);
}
return 0;
}