二分的题,不过精度卡的要死,最后执行了100次循环才过。。。TT
以后二分如果卡精度,就果断不用while判断了,还有就是判断方程无解的时候,考虑可能为0的情况。
代码:
#include<iostream> #include<cstdio> #include<vector> #include<string> #include<queue> #include<cstring> #include<cmath> #define maxn 10005 #define INF 0xfffffff #define mem(a,b) memset(a,b,sizeof(a)) #define FOR(i,s,t) for(int i=s;i<=t;i++) #define ull unsigned long long #define ll long long const double Exp1=1e-14; const double Exp2=1e-6; 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() { while(scanf("%d%d%d%d%d%d",&p,&q,&r,&s,&t,&u)!=EOF) { if(f(0)<-Exp1||f(1)>Exp1) {printf("No solution\n");continue;} double l=0,r=1,mid; for(int i=0;i<100;i++) { mid=l+(r-l)/2; if(f(mid)<0) { r=mid; } else { l=mid; } } printf("%.4lf\n",mid); } return 0; }