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;
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=8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 单调递增,那么我们就可以对[0,100]进行二分搜索,找出满足条件的数
代码:
1: #include <iostream>2: #include <cstdio>3: #include <cstring>4: #include <algorithm>5: #include <cmath>6: using namespace std;7:
8: double f(double x){9: return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;10: }
11:
12: int main()13: {
14: int T,y;15: scanf("%d",&T);16: while(T--)17: {
18: scanf("%d",&y);19: if(f(0)>y||f(100)<y)//f(0)>y或f(100)<y则无解20: {
21: printf("No solution!\n");22: continue;23: }
24: double l=1.0,r=100.0;25: while(r-l>1e-6)26: {
27: double m=(l+r)/2;28: if(f(m)>y) r=m-1e-7;29: else l=m+1e-7;30: }
31: printf("%.4lf\n",(l+r)/2);32: }
33: return 0;34: }
hdu 2199 Can you solve this equation?(二分搜索),布布扣,bubuko.com
hdu 2199 Can you solve this equation?(二分搜索)
原文:http://www.cnblogs.com/zyx1314/p/3608957.html