【luogu1024】一元三次方程求解(精度控制)
来源:互联网 发布:瑟尔效应 知乎 编辑:程序博客网 时间:2024/05/17 01:35
题目:
题解:
也算是一个数论?感觉难度主要在精度的控制上?运用了分治,但是发现如果不止3个结果判重超级麻烦。果然不是正解?
正解二分,至于把我愚蠢的代码粘上只是想复习复习精度控制?
代码:
分治
#include <cstdio>using namespace std;double A,B,C,D,ans[5];const double eps=1e-6;int cnt;int dcmp(double x){if (x<=eps && x>=-eps) return 0;if (x>eps) return 1;return -1;}double f(double x){return A*x*x*x+B*x*x+C*x+D;}void div(double l,double r){if (cnt==3) return;if (r-l<=1 && f(l)*f(r)>0) return; if (dcmp(l-r)==0){if (cnt==1 && l==ans[1]) return;if (cnt==2 && (l==ans[1] || l==ans[2])) return;ans[++cnt]=l;return;}double mid=(double)(l+r)/2;if (l<mid) div(l,mid);if (mid<r) div(mid,r);}int main(){scanf("%lf%lf%lf%lf",&A,&B,&C,&D);div(-100.00,100.00);for (int i=1;i<=3;i++) printf("%.2lf ",ans[i]);}
正解:
#include <cstdio>using namespace std;double A,B,C,D;const double eps=1e-6;int cnt;double f(double x){return A*x*x*x+B*x*x+C*x+D;}int main(){scanf("%lf%lf%lf%lf",&A,&B,&C,&D);for (int i=-100;i<=100;i++){if (cnt==3) return 0;double x1=i,x2=i+1;if (f(x1)==0){cnt++; printf("%.2lf ",x1);continue;}if (f(x1)*f(x2)>=0) continue;while (x2-x1>=eps){double xx=(double)(x1+x2)/2;if (f(xx)*f(x1)<0) x2=xx;else if (f(xx)*f(x2)<0) x1=xx;}cnt++; printf("%.2lf ",x1);}}
阅读全文
1 0
- 【luogu1024】一元三次方程求解(精度控制)
- [LUOGU1024] 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解
- 一元三次方程求解(折半查找)
- 一元三次方程求解(二分法寻根)
- 一元三次方程求解(注意范围)
- Python中整数和浮点数
- 输出指定区间的九九乘法表
- 关系型数据库理论
- 剑指offer-字符串左移
- POJ 1236 Network of Schools【tarjan算法】【模板题】
- 【luogu1024】一元三次方程求解(精度控制)
- javase面向对象三大特性之继承
- Cookie&Session详解
- 大数据领域的杰出公司(国内外1)
- HDU 6155 Subsequence Count dp + 矩阵+ 线段树
- python使用自己封装的库
- 避免’sudo echo x >’ 时’Permission denied’ 甲: 示例 sudo echo a > 1.txt -bash: 1.txt: Permission denied 乙:
- JAVA正则表达
- redis中conf文件中的配置