蓝桥云课 一元三次方程求解 Python(二分)

 


题目地址:一元三次方程求解

        看着这个题不要被吓到,这只是披着狼皮的二分罢了,注意题目中所说的实根,是包括小数的,而且由题意不过小数点后两位,而且根范围为(-100 ,100),不是特别大,所以我们可以对内两个两个的划分区间,若齐相乘< 0,则代表答案在他俩之间,若相乘== 0,则代表答案在最左边(因为我们是对整数范围而且相差为1进行判断,若答案在最右边则下一次移动时,最右边的答案会变为最左边的)。

先上二分模板:

def check(mid):
    if 符合条件:
        return True
    return False
 
 
left = 1
right = 10000
while left <= right:  # 也可以为'<',有的题目若为'<='则会陷入无限循环,此道题就是
    mid = (left + right) // 2
    if check(mid):  # return 1则代表此值可以用,但是可能小于答案,故向右搜索
        left  = mid + 1
    else:  # return 0则代表此值不可以用,此数比答案大,故向左搜索
        right = mid

        先对模板进行补充:

def func(x):
    return a * x*x*x + b * x*x + c * x + d

left = -100
right = left + 1
while right - left >= 0.001:
    mid = (right + left) / 2  # 注意不要为整除,因为答案存在小数
    if func(mid) * func(right) <= 0:
        left = mid
    else:
        right = mid
    left += 1
    right = left += 1

        在进行录入数据(注意要开浮点型,否则有段错误!):

a, b, c, d = map(float, input().split())

完整AC代码:

a, b, c, d = map(float, input().split())  # 注意要开浮点型,否则有段错误


def func(x):
    return a * x*x*x + b * x*x + c * x + d


for i in range(-100, 100):  # 数据不多,可以两个两个区间进行判断
    left = i
    right = left + 1
    fx1 = func(left)
    fx2 = func(right)
    if fx1 == 0:
        print("{:.2f}".format(left), end=' ')
    if (fx1 * fx2) < 0:  # 代表区间内存在解
        while right - left >= 0.001:
            mid = (right + left) / 2
            if func(mid) * func(right) <= 0:
                left = mid
            else:
                right = mid
        print("{:.2f}".format(left), end=' ')
            

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值