题意:
给定一个函数8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,给出y求x`,x的小数保留4位 四舍五入。如果不能得出结果 输出 No solution!x和y介于0和100之间
解题思路:
先求出最大的Y和最小的Y,如果输入的数比最小的Y小 或者比最大的Y大 输出No solution;然后用二分法求值。。。。。。。但是!!!!如果就只是用二分法的话 提交就会Time Limit Exceeded! 要在程序中设定求到5位小数以后就不要在往后求了
double EPS=0.000001;
double c=f(mid)-b;//输入的值和求解的值得差
while (c>EPS||c<-EPS)//如果这个差的精度在6位小数之上 停止计算
还要用到格式化输出。
#include <iostream>
#include<fstream>
#include<iomanip>
using namespace std;
double EPS=0.000001;//设定5位小数
double f(double x)
{
return 8 * x*x*x*x + 7 * x*x*x + 2 * x*x + 3 * x + 6;
}
int main()
{
double yl = f(0), yh = f(100);
int a;
cin >> a;
while (a--)
{
int b;
cin >> b;
if (b < yl || b > yh)
{
cout << "No solution!" << endl;
continue;
}
double l=0,h=100,mid = 50;
double c=f(mid)-b;
while (c>EPS||c<-EPS)
{
if (c > 0) h = mid, mid = (l + mid) / 2;
else l = mid, mid = (mid + h);
c = f(mid) - b;
}
cout<<setprecision(4) <<setiosflags(ios::fixed)<< mid << endl;
}
return 0;
}