P1024 一元三次方程求解

题意

有形如:ax3+bx2+cx+d=0ax^3+bx^2+cx+d=0ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,da,b,c,da,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在−100至100之间),且根与根之差的绝对值 ≥1≥1≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

输入一行,4个实数 a,b,c,da,b,c,da,b,c,d。
输出一行,3个实根,并精确到小数点后2位。

思路

由于数据量太小,我们可以直接暴力枚举,从 -100 到 100 ,每次+0.01,逐个寻找解。

或者,我们从左到右找出四个函数值不同的点,然后对三个区间进行二分查找。

亦或者,直接利用盛金公式,将解算出来。

代码

暴力出奇迹 (25ms)

#include<bits/stdc++.h>using namespace std;const double eps = 0.0001;
double a,b,c,d;double f(double x)
{return pow(x,3)*a+pow(x,2)*b+x*c+d;
}int main()
{cin >> a >> b >> c >> d;for(double i = -100; i <= 100; i += 0.01){if(abs(f(i)-0)<eps)printf("%.2f ",i);}printf("\n");return 0;
}

最开始自己写的二分(14ms)
代码冗长

有时间再优化下

#include<bits/stdc++.h>using namespace std;const double eps = 0.0001;
double a,b,c,d;
double ans1,ans2,ans3;double f(double x)
{return pow(x,3)*a+pow(x,2)*b+x*c+d;
}int main()
{cin >> a >> b >> c >> d;double x1 = -100;double x4 = 100;double x2 = 0;double x3 = 0;for(double i = -99; i <= 99; i+=0.5){//0.5十分重要if(f(i)*f(x1)<0){//不能<=x2 = i;break;}}for(double i = 99; i >= -99; i-=0.5){if(f(i)*f(x4)<0){x3 = i;break;}}
//cout << x1 << " " << x2 << " " << x3 << " " << x4 << endl;
//cout << f(x1) << " " << f(x2) << " " << f(x3) << " " << f(x4) << endl;
//找出四个点,对三个区间进行二分double r = x2;double l = x1;while(abs(r-l)>eps){double mid = (l+r)/2;if(f(mid)*f(l)>0)l = mid;elser = mid;}ans1 = l;r = x3;l = x2;while(abs(r-l)>eps){double mid = (l+r)/2;if(f(mid)*f(l)>0)l = mid;elser = mid;}ans2 = l;r = x4;l = x3;while(abs(r-l)>eps){double mid = (l+r)/2;if(f(mid)*f(l)>0)l = mid;elser = mid;}ans3 = l;printf("%.2f %.2f %.2f\n",ans1,ans2,ans3);return 0;
}

洛谷 P1024 一元三次方程求解 (暴力 or 二分 or 盛金公式)相关推荐

  1. 洛谷 [P1024]一元三次方程求解【二分答案】

    题目链接:https://www.luogu.org/problemnew/show/P1024 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b ...

  2. [NOIP2001] 提高组 洛谷P1024 一元三次方程求解

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  3. 洛谷 P1024 一元三次方程求解

    不会二分就暴力计算 提示:记方程f(x)=0f(x)=0,若存在22个数x_1x1​和x_2x2​,且x_1<x_2x1​<x2​,f(x_1) \times f(x_2)<0f(x ...

  4. P1024 一元三次方程求解 牛顿迭代+盛金公式+二分+勘根定理

    P1024 一元三次方程求解 传送门 题目描述 有形如:ax^3+bx^2+cx^1+dx^0=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实 ...

  5. 洛谷-P1024-一元三次方程求解-普及-暴力/盛金公式/分治

    一 题目与示例 二 题解 1.暴力求解骗分法:D #include <iostream> #include <cmath> #include <iomanip> u ...

  6. P1024 一元三次方程求解(递归式二分)

    整理的算法模板合集: ACM模板 我们判断两点(x)之间是否有根的依据是是否存在f(x)∗f(y)<0f(x) * f(y)<0f(x)∗f(y)<0 然后由于题目中说根于根之间的差 ...

  7. P1024 一元三次方程求解 两种方法

    二分 #include<bits/stdc++.h> using namespace std; double a,b,c,d; double fun(double x){double nu ...

  8. 盛金公式解一元三次方程_一元三次方程解法(卡尔丹公式法盛金公式法)

    卡尔丹公式法 特殊型一元三次方程 X^3+pX+q=0 (p.q∈R) 判别式Δ=(q/2)2+(p/3)3 卡尔丹公式 X1=(Y1)(1/3)+(Y2)(1/3) X2= (Y1)(1/3)ω+( ...

  9. [洛谷P1024]python一元三次方程求解

    [洛谷P1024]python一元三次方程求解 首先将方程幂次形式转换为乘积形式(可节省代码运行时间) 其次使用零点定理F(x1)∗F(x2)<0F({x}_1)*F({x}_2)<0F( ...

最新文章

  1. usaco Dual Palindromes
  2. 六丶青龙的依赖库+拉库+互助安装及使用教程
  3. ASP.NET MVC 5 使用autofac实现DI
  4. MySQL—通过Adjacency List(邻接表)存储树形结构
  5. 从需求来看《IT人员应聘建议》
  6. 【jzoj】2018.2.3NOIP普及组——D组模拟赛
  7. 隐马尔科夫模型-前向算法
  8. 有关CentOS的常见问题
  9. 数据在数组中存储的顺序:小端 OR 大端模式 详解
  10. configure: error: Could not find cups!
  11. Auto.js微信抢红包脚本
  12. 计算机ps基础知识大全,全国计算机ps一级考试题型
  13. python陆股通_【科普】沪股通、深股通、港股通、陆股通都是什么意思?
  14. java数据结构与算法基础(二)-排序
  15. Linux云服务器基础学习
  16. 突破KEIL软件编译时 C51中断号最大只能为31限制的补丁,使中断号可以达到256
  17. C++ 实用趣味小程序
  18. 微信小程序之图片压缩
  19. Machine Learning - Coursera 吴恩达机器学习教程 Week1 学习笔记
  20. 地图服务 WMS WFS WCS TMS

热门文章

  1. 如何解决电脑不停自动下载安装软件问题?
  2. 从浏览器地址栏输入url到请求返回发生了什么?
  3. 密码打马赛克已经不安全了!这款开源的去 “马赛克” 工具一秒还原
  4. park和unpark方法详解
  5. vscode配置php开发环境
  6. 软件测试自动化验证码,自动化测试如何解决验证码的问题
  7. Scrapy搜狗微信:使用cookies登录并使用打码平台自动输入验证码
  8. i5 11300H和r5 5500u的差距大不大
  9. 跑路、清退or出海?这道留给交易所的题太难
  10. 浏览器获取MAC地址