一元三次方程求解2274题

目录

题目

样例

用到的一元三次方程性质

图像特征

可以求出三个根的范围

根的性质 

大概思路

 二分函数具体思路

代码


题目

题目描述

输入:一行四个实数a,b,c,d。

输出:一行三个实根,从小到大输出,并精确到小数点后两位。

样例

输入

1 -5 -4 20

输出

-2.00 2.00 5.00

用到的一元三次方程性质

图像特征

可以求出三个根的范围

根的性质 

f(x)=0,若存在两个数x1,x2且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根。

方程的根 相当于 函数的零点,那题目说的特殊的一元三次方程的根,两边的函数值一定是异号的。(看图片只有两种情况)

就是要根据异号来二分查找。

说明在二分查找的时候要一直保持两端点值带入方程后是异号的。

整体思路

先都用double定义数据,

一点一点的平方根号,计算出x1,x2的值。(C语言根号sqrt(),头文件#include<math,h>)

然后分三次运用二分查找。第一次(-100,x1),第二次(x1,x2),第三次(x2,100)。

(要求是按顺序输出①②③,二分查找的时候看好查找顺序,就不用排序了。)

查找的时候每次找使f(x)异号的两端点进行下一次查找。结束条件是两端点值差的绝对值小于0.001

然后输出任意一个端点就好了

(因为判断小于0.001时精确度比题目要求的多一位,两端点在精确到0.01时数值是一样的)

看到这里如果有思路了,可以先自己写写试试,实在不行再看接下来的。 

 二分函数具体思路

以-100<①<x1举例,

求二分的函数需要两个参数,(-100,x1)。

计算中点a= (-100+x1)/2

求得三个数的正负号,f(-100)<0,f( a)<0,f(x1)>0

(这里可以再定义一个函数返回0/1来判断正负。增加代码可读性)

则需要求的①在区间(a,x1)中。然后进行下一次查找。

还是判断f(a),f(x1),f((a+x1)/2) 三者的正负,再进行下一次查找。

递归的结束条件:两端点值差的绝对值小于0.001(比题目要求的精确度高一位就好)

代码

(看看代码整理一下整体思路,我的代码还有好多可以优化的地方,自己有思路了,写出来估计会更简洁)

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值