题目描述输入描述输出描述输入输出样例最终代码
1、c/c++2、java3、python 过程理解 题目描述
有形如:ax3+bx2 + cx + d =0这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100 至 100 之间),且根与根之差的绝对值>1。
要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。
输出描述输入一行,4个实数a,b,c,d
输入输出样例输出一行,3个实根,从小到大输出,并精确到小数点后2位。
输入:
1 -5 -4 20
输出:
-2.00 2.00 5.00
最终代码 1、c/c++
#include
2、java
import java.util.*;public class Main{ // 暴力枚举 public static void main(String[] args){ Scanner rd =new Scanner(System.in); double a = rd.nextDouble(); double b = rd.nextDouble(); double c = rd.nextDouble(); double d = rd.nextDouble(); for(double i=-100;i<=100;i+=0.01) if(Math.abs(a*i*i*i+b*i*i+c*i+d) < 0.000001) System.out.printf("%.2f ",i); }}
3、python
n = input().split()a,b,c,d = eval(n[0]),eval(n[1]),eval(n[2]),eval(n[3])def y(x): return a*x*x*x+b*x*x+c*x+dfor i in range(-100,100): left=i right=i+1 y1=y(left) y2=y(right) if y1==0: print("{:.2f}".format(left),end=" ") if y1*y2<0 : while (right-left) >= 0.001: #eps=0.001 mid = (left+right)/2 if y(mid)*y(right) <=0: left = mid else: right = mid print("{:.2f}".format(right),end=" ")
过程理解