求函数的解 (二分法的应用)

Description

现在,给出等式8* X^4+ 7* X^3+ 2* X^2+ 3 * X +6= Y,请找出他在0和100之间的解(包含0和100)。
现在,请你试试运气。。。。
 

Input

输入的第一行包含一个整数T(1 <= T <=100),表示测试用例的数目。接下来T个数字,每一行都有一个实数Y(abs(Y)<=10^10);

Output

对于每个测试用例,如果有解,你应该输出一个实数(精确到小数点后4位,四舍五入),如果在0到100之间无解,就输出“No solution!”。

Sample Input

2

100

-4 

Sample Output

1.6152

No solution!

 1 #include<cstdio>
 2 double f(double x)
 3 {
 4     return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;
 5 }
 6 int main()
 7 {
 8     int t,a;
 9     scanf("%d",&t);
10     while(t--)
11     {
12         double y,l,r,mid;
13         scanf("%lf",&y);
14         if(y < 6 || y > 8*100*100*100*100+7*100*100*100+2*100*100+3*100+6)
15             printf("No solution!\n");
16         else
17         {
18             l=0;
19             r=100;
20             a=50;
21             while(a--)
22             {
23                 mid=(l+r)/2;
24                 if(f(mid) < y)
25                 {
26                     l=mid;
27                 }
28                 else
29                 {
30                     r=mid;
31                 }
32             }
33             printf("%.4f\n",l);
34         }
35         
36     }
37 }

 

posted @ 2016-07-26 10:13  野小子&  阅读(429)  评论(0编辑  收藏  举报