题意:求解x在0到100之间是否存在唯一的解,使8x^ 4+7x^ 3+2x^2+3x+6=Y。
不存在解的情况是:
Y<8f1(0)+7f2(0)+2f3(0)+3f4(0)+6或者
Y>8f1(100)+7f2(100)+2f3(100)+3f4(100)+6;
思路:采用二分的思想,当出现(right-left)>1e-8,即找到解X。
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;
double f1(double x){return x*x*x*x;
}
double f2(double x){return x*x*x;
}
double f3(double x){return x*x;
}
double f4(double x){return x;
}
int main(){int t;cin>>t;while(t--){double left,right;double Y;cin>>Y;int flag=0;left=0,right=100;double mid=0;while((right-left)>1e-8){mid=(left+right)/2;double sum=8*f1(mid)+7*f2(mid)+2*f3(mid)+3*f4(mid)+6;if(sum>Y){right=mid;}else{left=mid;}}double t1=8*f1(0)+7*f2(0)+2*f3(0)+3*f4(0)+6;double t2=8*f1(100)+7*f2(100)+2*f3(100)+3*f4(100)+6;if(Y>=t1&&Y<=t2){cout<<setiosflags(ios::fixed)<<setprecision(4)<<mid<<endl;}else{cout<<"No solution!"<<endl;}}return 0;
}