思路: 二分
分析:
1 求题目给定的等式是否有[0,100]之间的解
2 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6是一个单调递增的函数,那么求解的话我们利用二分的思想
3 注意判断没有解的情况就是Y < 0 或者 Y大于x为100的时候等式的值
代码:
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; const double eps = 1e-10; double Pow(double x , int y){ double sum = 1; for(int i = 0 ; i < y ; i++) sum *= x; return sum; } void solve(double n){ double left = 0.0; double right = 100.0; double mid; double sum = 8*Pow(100,4)+7*Pow(100,3)+2*Pow(100,2)+300; n -= 6; if(n < 0 || n > sum){ puts("No solution!"); return; } while(right-left > eps){ mid = (left+right)/2.0; sum = 8*Pow(mid,4)+7*Pow(mid,3)+2*Pow(mid,2)+ 3*mid; if(sum - n > eps){ right = mid; } else{ left = mid; } } printf("%0.4lf\n" , left); } int main(){ int cas; double n; scanf("%d" , &cas); while(cas--){ scanf("%lf" , &n); solve(n); } return 0; }