题目描述

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

提示:记方程f(x)=0f(x)=0,若存在22个数x_1x1​和x_2x2​,且x_1<x_2x1​<x2​,f(x_1) \times f(x_2)<0f(x1​)×f(x2​)<0,则在(x_1,x_2)(x1​,x2​)之间一定有一个根。

输入格式

一行,44个实数A,B,C,DA,B,C,D。

输出格式

一行,33个实根,并精确到小数点后22位。

输入输出样例

输入 #1复制

1 -5 -4 20

输出 #1复制

-2.00 2.00 5.00

一、枚举法

cout.precision设置小数点位数;

cout.setf(ios::fixed)以定点形式显示浮点数;

#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;int pow(int x,int n) {int res = 1;for(int i = 0; i < n; i++) res *= x;return res;
}int main() {double x,f,a,b,c,d;cin >> a >> b >> c >> d;cout.precision(2);      //设置精度,即小数点位数 cout.setf(ios::fixed);     //以定点形式显示浮点数 for(double i = -10000; i <= 10000; x = (++i) / 100.0) {f = x * x * x * a + x * x * b + x * c + d;if(f >= -0.01 && f <= 0.01)cout << x << ' '; }cout << endl; return 0;
} 

二、二分法

记方程为f(x) = 0,若存在两个不同的数,且f() * f() < 0,则在()之间一定有一个根;

当已知区间(a,b)内有一个根时,可用二分法求解,若区间(a,b)内有根,则必有f(a)*f(b) < 0。重复执行一下过程:

令m = (a + b) / 2;

  1. 若 a + 0.000 1 > b 或 f(m) = 0,则可以确定根为m,并退出过程;
  2. 若 f(a) * f(m) < 0,则必有 f(m) * f(a) < 0 根在区间(a,m)中,故对区间重复该过程;
  3. 若 f(a) * f(m) < 0,则必有 f(m) * f(b) < 0 根在区间(m,b)中,对区间重复该过程;

执行完毕,就可以得到精确到0.000 1的根;

所以,根据"根与根之差的绝对值 >= 1 “,先对区间[-100,-99]、[-99,-98]…[99,100]进行枚举,确定这些区间内是否有解,然后对所有有解的区间使用二分法就可以了。

#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;
float a, b, c, d;
int n;
float ans[4];float Equation(float x) {return ((a * x + b) * x + c) * x + d;
}void solve(float l,float r) {if(Equation(l) * Equation(r) > 0 && ((r-l) < 1 || n >= 2))//区间等于1以内没有解,返回;//或者区间长度大于一,并且已经得到两个解,则只剩下一个解,如果该区间两端函数值相乘大于0,则可以直接返回,减少不必要的时间浪费return;float mid = (l + r) / 2;if(Equation(mid) <= 1e-4 && Equation(mid) >= -1e-4) {ans[++n] = mid;return;}solve(l,mid),solve(mid,r);
}int main() {cin >> a >> b >> c >> d;solve(-100,100);cout << fixed << setprecision(2) << ans[1] << ' ' << ans[2] << ' ' << ans[3] << endl; return 0;
}  

长路漫漫,未来可期;

解一元三次方程noip2001相关推荐

  1. 问题三十七:C++怎么解一元四次方程?(2)——怎么解一元三次方程

    37.2 怎么解一元三次方程? 用"盛金公式"求解: ----------------------------------------------main.cpp -------- ...

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

    卡尔丹公式法 特殊型一元三次方程 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)ω+( ...

  3. 解一元三次方程方程问题细节探讨

    解一元三次方程 虽然我是一个新手,按"规矩"应该要经常在博客里面把自己的错误都写出来做个总结,但是我比较保守,总是觉得博客是一个社交平台,一些相对不太成熟的东西还是写个word文档 ...

  4. 盛金公式解一元三次方程_【国际数学竞赛】高次方程求根

    对于一元二次方程 ,我们由求根公式可得: . 对于一元三次方程 ,我们有 卡尔丹公式法和盛金公式法.不过公式比较冗长.不易计算,但我们还是有方法计算的,那么如果是一元四次.一元五次甚至更高呢? 遇到高 ...

  5. 盛金公式解一元三次方程_盛金公式解一元三次方程

    Module Shengjin_mod Implicit None contains Function Cubic_equation(Co) Result (X) !盛金公式求解一元三次方程 !默认浮 ...

  6. c++解一元三次方程

    求解一元三次方程组 转自:http://blog.csdn.net/u012221917/article/details/17175793 float f(float w_f, float x_f, ...

  7. 牛顿迭代法解一元三次方程

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

  8. matlab复数方程的根,matlab解一元三次方程,得到的都是复数根。

    对于你昨天的那个方程,是典型的非线性方程,我修改了程序,用fsolve函数来解,程序在下面.先新建一个m文件,再把以下全部程序直接复制进m文件中,运行即可,不要在主窗口中运行,用m文件来写程序,比直接 ...

  9. EXCEL 单变量求解 解一元三次方程

    目标单元格:是公式所在的单元格,也是方程所在的单元格,如图中的B1=3*A1^3-100*A1^2+300*A1-300 目标值:即目标单元格的值,想要让单元格的值变成多少?即要让方程的结果等于多少 ...

最新文章

  1. perl脚本的默认参数
  2. intel服务器芯片组介绍,Intel芯片组的简介
  3. Mybatis(13)动态sql语句if/where/foreach
  4. Leetcode 俄罗斯套娃信封问题
  5. ssh客户端_Termius for Mac(SSH客户端) v6.3.0
  6. [debug+Python] 复制字典不能直接用 ‘=’,要用dict_name.copy()
  7. 【渝粤教育】国家开放大学2018年春季 0092-22T民法 参考试题
  8. 微服务学习之02支付模块构建(单个、集群)【Hoxton.SR1版】
  9. 2013=726 整合,优化,利用自身资源。 让自己的时间更有意义,最大化利用
  10. Navicat 数据库可视化工具远程连接MySQL及基本操作
  11. 合肥Java面试常考题_java面试常考题-String
  12. 免费IDM注册机下载
  13. 刘銮雄-公道不在人心,是非只在时势
  14. MySQL死锁产生的原因和解决方法
  15. 数学中的向量相关知识
  16. CW MCU v11.1学习笔记1
  17. 谈ArcGIS分数标注的问题 分子分母形式
  18. 批量识别医疗票据【第1版】
  19. 3D视觉基础(基本原理及3D传感器基本参数)
  20. matlab实现水塔水流量问题

热门文章

  1. java月份前面去掉0,JAVA日期格式输出月度前面不想被自动补0
  2. RocketMQ吐血总结
  3. 【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)
  4. 为什么要建设智慧城市?
  5. Pytest Fixture详解
  6. 【小李木耳】原创:致官二代
  7. 桌面计算机休眠快捷键,win10系统桌面休眠快捷键设置的具体技巧
  8. 【rzxt】有什么好的措施能防止蹭网呢
  9. potplayer 64位 官网下载地址
  10. php随机数生成代码,PHP随机数生成代码与使用实例分析