浏览 2049 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-10
Can you solve this equation?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 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
Sample Output
简单的二分,我第一道二分题目。
代码:
#include <iostream> #include <stdio.h> #include <cmath> using namespace std; const double eps = 1e-12; double x, y; double calc(double x) { return 8*x*x*x*x + 7*x*x*x + 2*x*x + 3*x + 6; } int main() { int t; double mid, left, right; scanf("%d", &t); while(t--) { scanf("%lf", &y); left = 0; right = 100; if(calc(left) > y || calc(right) < y) { printf("No solution!\n"); continue; } while(right - left > eps) //二分查找 { mid = (right+left)/2.0; if(calc(mid) > y) right = mid; else left = mid; } printf("%.4lf\n", mid); } return 0; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-25
表达式可以优化成
x(x(x(8x+7)+2)+3)+6 优化前10次乘法4次加法 优化后 4次乘法4次加法 |
|
返回顶楼 | |
发表时间:2011-08-25
楼主 写道 表达式可以优化成
x(x(x(8x+7)+2)+3)+6 优化前10次乘法4次加法 优化后 4次乘法4次加法 高手啊!!! ![]() ![]() ![]() |
|
返回顶楼 | |