做这道题的感觉就是,ac离你很近,但怎么都ac不了。。。
函数解析式是单调递减的,用高中老师就教过的二分法可以快速算出来
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
double p,q,r,s,t,u;
double value(double x)
{
return p*exp(-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*(x)*(x)+u;
}
int main()
{
double i,j,ans;
int flag;
while(scanf("%lf %lf %lf %lf %lf %lf",&p,&q,&r,&s,&t,&u)!=EOF)
{
flag=0;
i=0,j=1;
if(value(0)<0 || value(1)>0) {//最后加了这句才ac
printf("No solution\n");
continue;
}
while(1)
{
if(value(i)-value(j)<1e-9)
{
printf("%.4lf\n",(i+j)/2);
flag=1;
break;
}
if(value(i)<0||value(j)>0)
break;
ans=value((i+j)/2);
if(ans>0)
i=(i+j)/2;
else
j=(i+j)/2;
}
if(flag==0)
printf("No solution\n");
}
return 0;
}