1238:一元三次方程求解

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 6364     通过数: 3241

【题目描述】

形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程。

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

【输入】

一行,包含四个实数a,b,c,d,相邻两个数之间用单个空格隔开。

【输出】

一行,包含三个实数,为该方程的三个实根,按从小到大顺序排列,相邻两个数之间用单个空格隔开,精确到小数点后2位。

【输入样例】

1.0 -5.0 -4.0 20.0

【输出样例】

-2.00 2.00 5.00

【分析】

数学中,一个十分基本的问题是求给定方程的解。如下列方程:

4X^5 - 3X^4 + 2X^3 + 6X^2 + 5X - 7 = 0

x+ sinx - 3=0

x^10 -10x = 0

lgx - x^2 + 7x + 5 = 0

它们的一般形式可表示为:f(x)=0。方程的根或解是使f(x)等于0的那些x的值。这里,我们仅考虑x为实数的情况。方程f(x)=0可能无根,有单根、多根,甚至有无穷多根。求解这个问题,可以采用枚举法,也可以采用分治法。

方法1:枚举法。分析一下,根的范围在-100到100之间,以根为枚举对象,枚举范围是-100到100,因为结果要保留两位小数,故此,步长为0.001。 将枚举的根,代入原方程,利用误差法,对原方程式进行一一验证,找出方程的解。

【参考代码1】

#include <stdio.h>
#include <math.h>
double a,b,c,d;
double f(double x)
{return ((a*x+b)*x+c)*x+d;
}
int main()
{double i;scanf("%lf%lf%lf%lf",&a,&b,&c,&d);for(i=-100;i<=100;i+=0.001)if(fabs(f(i))<1e-6)printf("%.2lf ",i);printf("\n");return 0;
}

方法2:分治法。二分法要求将方程改写成f(x)=0的形式,然后y=f(x)。先选取x1和x2两点,使f(x1)和f(x2)异号。由于y=f(x)是连续不断的曲线,故在x1和x2之间至少有一个根存在。先将可变区间[x1,x2]两等分,求出其中点,即x3=(x1+x2)/2,然后求出函数在中点处的值f(x3)。若f(x3)与f(x1)同号,则新的可变区间就是[x3,x2];如果异号,则新的可变区间是[x1,x3];如果f(x3)=0,则求解完毕。如此重复叠代下去,直至可变区间之长度小于某个预先给定的值为止,或者达到f(x) = 0。

【参考代码2】

#include<stdio.h>
#include<math.h>
double a,b,c,d;
double F(double x)
{return  ((a*x+b)*x+c)*x+d;
}
int main()
{int i;double x1,x2,xb;scanf("%lf%lf%lf%lf",&a,&b,&c,&d);for(i=-100;i<=100;i++){x1=i;x2=i+0.99999;         //注意此处不能用 x2=i+1,否则 else if 分支求一个,if分支又求一个,重复了if(fabs(F(x1))<1e-6)printf("%.2lf ",x1);else if(F(x1)*F(x2)<0){xb=(x1+x2)/2;while(fabs(x2-x1)>1e-6)     // x1 != x2,  二分法找到根 {if(F(x1)*F(xb)>0)x1=xb;elsex2=xb;xb=(x1+x2)/2; }printf("%.2lf ",xb); }}printf("\n");return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1238

信息学奥赛一本通(1238:一元三次方程求解)相关推荐

  1. c++一本通 1238一元三次方程求解

    题目可以在7种二分查找法的总结中 找到 这道题 需要用到一些数学知识: 关于一个方程ax3+bx2+cx+d=0ax3+bx2+cx+=0, 一定有三个复数解, 并且题目 保证 所有解在 实数范围内, ...

  2. 信息学奥赛一本通 1101:不定方程求解 | OpenJudge NOI 2.1 7650 | 小学奥数 7650

    [题目链接] ybt 1101:不定方程求解 OpenJudge NOI 2.1 7650:不定方程求解 OpenJudge NOI 小学奥数 7650:不定方程求解 [题目考点] 1. 枚举 [解题 ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通超详细题解,动画图文题解

    内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...

  5. 【信奥赛一本通】1238:一元三次方程求解(详细代码)

    [分治算法]一元三次方程求解 1.[题目描述] 2.[代码] 1.[题目描述] [题目描述] 形如:ax3+bx2+cx+d=0 这样的一个一元三次方程. 给出该方程中各项的系数(a,b,c,d均为实 ...

  6. 信息学奥赛一本通(1101:不定方程求解)

    1101:不定方程求解 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 18175     通过数: 14383 [题目描述] 给定正整数a,b,c.求不定方程 a ...

  7. P1024 [NOIP2001 提高组] 一元三次方程求解 /1238:一元三次方程求解

    P1024 [NOIP2001 提高组] 一元三次方程求解 /1238:一元三次方程求解 # [NOIP2001 提高组] 一元三次方程求解 ## 题目描述 有形如:$a x^3 + b x^2 + ...

  8. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  9. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

最新文章

  1. 关于 HTML5 的 11 个让人难以接受的事实
  2. 在桌面上创建一个宽带连接服务器,win7宽带连接怎么创建桌面
  3. python策略模式_设计模式(python实现):策略模式
  4. [Linux] Vmware 15安装CentOs后显示网络不可用
  5. How to show out three rows from the same databand On A4?
  6. sklearn 下的 ensemble learning
  7. 将python(py文件)转换成.exe方法
  8. 2021-11-25 使用kali自带的SET工具制作钓鱼网站
  9. android 邮箱 推荐,Android邮箱谁最棒?最新热门邮箱App横向测试
  10. 我的编程之路点滴记录(五)
  11. python爬虫英文单词_非常适合新手的一个Python爬虫项目:打造一个英文词汇量测试脚本...
  12. uniapp:一个多边形图片裁剪插件
  13. 加州大学圣地亚哥分校计算机科学排名,加州大学圣地亚哥分校UCSD计算机科学Computer Science专业排名第37位(2021年THE世界大学商科排名)...
  14. 实用又救急!快速恢复误删文件!
  15. (九)巴菲特与索罗斯的投资习惯:术业有专攻
  16. 为了防止别人非法使用计算机可以通过,[单选] 为了防止别人非法使用计算机,可以通过为计算机设置口令()。...
  17. java之TimeUnit.SECONDS.sleep()详细分析(全)
  18. SpringBoot-七牛云对象存储库
  19. 树域,子域和林的创建与加入
  20. 空间计量 python_【空间计量教程】空间计量及Geoda、Stata、R操作(线性回归篇)...

热门文章

  1. 浅谈Base64编码[转]
  2. 漫画:数据中台中台建设的十大误区(建议收藏)
  3. 什么是数字孪生?有哪些关键能力?
  4. 入门 | 使用 SQL 构建一个关系数据库比你想的更容易
  5. uboot启动第二阶段——start_armboot
  6. 如何把安静的程序员逼成话唠
  7. 面试官问我平时怎么看源码的,我把这篇文章甩给他了。
  8. redis 分布式锁的 5个坑,真是又大又深
  9. 蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统
  10. 【技术文档】JEECG整合JXLS步骤与开发