题目描述
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在 −100至 100 之间),且根与根之差的绝对值≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后 2 位。
输入描述
输入一行,4 个实数 a,b,c,d。
输出描述
输出一行,3 个实根,从小到大输出,并精确到小数点后 2 位。
输入输出样例
示例 1
输入
1 -5 -4 20
输出
-2.00 2.00 5.00
a, b, c, d = map(float, input().split())#输入第一行
def y(x):#方程的表达式 用来计算y
return a*x*x*x+b*x*x+c*x+d
for i in range(-100, 100):
left = i
right = i+1#在i和i+1这个小区间内计算,看y1*y2是否小于0,小于0则有根
y1 = y(left)
y2 = y(right)
if y1 == 0:
print("{:.2f}".format(left), end=' ')#输出两位小数
if y1*y2<0:
while right-left >= 0.001:#二分查找
mid = (left+right)/2
if y(mid)*y(right) <= 0:#说明跟在mid和right之间
left = mid
else:
right = mid
print("{:.2f}".format(right), end=' ')