Problem Description
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;<br>Now please try your lucky.
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has a real number Y (fabs(Y) <= 1e10);
Output
For each test case, you should just output one real number(accurate up to 4 decimal places),which is the solution of the equation,or “No solution!”,if there is no solution for the equation between 0 and 100.
Sample Input
2 100 -4
Sample Output
1.6152 No solution!
解题思路:
由方程可知这是一个单调递增的函数(未知数前的系数全部为正数),给定y,求x;
因为方程单调,采用二分法(类似于高中所学的求零点,只不过要求的值为y而不是0);
ps(注意):
1- 方程所求的x是有范围的,所以可以直接用边界试,在边界外,直接说:“木有答案呀”,就不用多做运算了;
AC.1:
#include<bits/stdc++.h>
using namespace std;
double f(double x)
{
return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
}
double dao(int y,double l,double h)
{
//cout<<"y="<<y<<" l="<<l<<" h="<<h<<endl;
double mid=(l+h)/2;
if(h-l>=10e-7)
{
//cout<<"h-l="<<h-l<<" mid="<<mid<<" f(mid)="<<f(mid)<<endl;
if(f(mid)==y)
{
return mid;
}
if(f(mid)>y)
return dao(y,l,mid);
if(f(mid)<y)
return dao(y,mid,h);
}
return mid;
}
int main()
{
int n,y;
cin>>n;
while(n--)
{
cin>>y;
if(y<f(0)||y>f(100))
cout<<"No solution!"<<endl;
else
{ printf("%0.4lf\n",dao(y,0,100));
//cout<<dao(y,0,100);
}
}
return 0;
}
and..英语对我有深深的恶意,,我会待他如初恋的。。