Problem Description
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you findits solution between 0 and 100;
Now please try your lucky.
Input
The first line of the input contains an integer T(1<=T<=100) whichmeans the number of test cases. Then T lines follow, each line has a real numberY (fabs(Y) <= 1e10);
Output
For each test case, you should just output one real number(accurate up to4 decimal places),which is the solution of the equation,or “No solution!”,ifthere is no solution for the equation between 0 and 100.
Sample Input
2
100
-4
Sample Output
1.6152
No solution!
考察点:二分法
题目大意:给你一个方程8*x^4 +7*x^3 + 2*x^2 + 3*x + 6 == Y,让你求它出在0-100内的所有的解。第一行输入一个T(1<=T<=100),表示有T组测试数据,紧接着输入T行,每行包括一个Y(fabs(Y)<= 1e10)。最后方程若有解输出该解并保留4位有效数字,若无解输出“Nosolution!”
题目解析:根据求导可知该函数在0-100内是递增的,所以直接用二分法做就可以了。
AC代码:
#include<cstdio>
#include<cmath>
#include<iostream>
int f(double x)
{
return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;
}
int main()
{
int T;
double Y;
scanf("%d",&T);
while(T--)
{
scanf("%lf",&Y);
if(Y<f(0)||Y>f(100)) //判断Y是否在0-100所对应的函数范围内
printf("No solution!\n");
else
{
double l=0,r=100,mid;//二分
while(r-l>1e-7)
{
mid=(l+r)/2;
if(f(mid)<Y)
l=mid+1e-8;
else r=mid-1e-8;
}
printf("%.4lf\n",(r+l)/2);
}
}
return 0;
}