HDU2199Can you solve this equation?(二分)
2016-07-26 11:05
246 查看
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!
思路:二分法,每次都用中间的点与所给值判断大小,如果小于则应该在前面区间更新尾点,如果大于在后面区间更新初始点。这里注意douuble不可能正好等于,所以要定义精度判断。
代码:
现在,给出等式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!
思路:二分法,每次都用中间的点与所给值判断大小,如果小于则应该在前面区间更新尾点,如果大于在后面区间更新初始点。这里注意douuble不可能正好等于,所以要定义精度判断。
代码:
#include<stdio.h> #include<iostream> #include<algorithm> #include<math.h> #define xps 1e-12 using namespace std; double s(double x) { return x=8.0*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6; } int main() { int t; cin>>t; double max=s(100),min=s(0); while(t--) { int p=1000; int t=0; double n; cin>>n; if(n>max||n<xps+min) printf("No solution!\n"); else { double l=0.0,e=100.0; while(p--) { double mid=(l+e)/2.0; if(s(mid)<n) { l=mid+xps; } else { e=mid+xps; } } printf("%.4lf\n",l); } } return 0; }
相关文章推荐
- 刷题也就这么点地方
- 做朋友圈需先从做人开始
- OC - 原生扫码(扫描二维码,条形码)
- 语言中的闭包
- windows下配置安装YAF环境
- spring+mybatis通用dao层、service层的一些个人理解与实现
- 类模板的继承(转)
- UVA10154->区间DP
- 63. Unique Paths II
- 如何掌握Facebook自动人脸识别技术?
- LeetCode 19. Remove Nth Node From End of List
- 进程和线程的区别是什么(转自知乎)
- C++类构造函数初始化列表
- centos7 sshd publickey 无密码登录 问题解决
- 写给自己
- 华为上机:Tom的生日礼物
- 【CreateJS】WebStorm+Adobe Animate CC 搭配开发HTML5,入门教程
- 关于在JSP中使用正则表达式限制输入框输入的条件
- Fragment的生命周期和Activity生命周期对比 代码片段
- Jmeter+maven+Jenkins构建云性能测试平台(一)