列表

详情


NC16694. [NOIP2001]一元三次方程求解

描述

有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值 ≥ 1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。
提示:记方程f(x) = 0,若存在2个数x1和x2,且x< x2,f(x1)*f(x2) < 0,则在(x1,x2)之间一定有一个根。

输入描述

一行,4个实数A,B,C,D。

输出描述

一行,3个实根,并精确到小数点后2位。

示例1

输入:

1 -5 -4 20

输出:

-2.00 2.00 5.00

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 4ms, 内存消耗: 416K, 提交时间: 2022-07-26 17:26:28

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

Pascal(fpc 3.0.2) 解法, 执行用时: 1ms, 内存消耗: 256K, 提交时间: 2018-10-23 14:32:36

var a,b,c,d,x:real;
i:longint;
begin
read(a,b,c,d);
for i:=-10000 to 10000 do
if abs(a*(i/100)*(i/100)*(i/100)+b*(i/100)*(i/100)+c*(i/100)+d)<0.01 then
begin
x:=i/100;
write(x:0:2,' ');
end;
end.

pypy3 解法, 执行用时: 110ms, 内存消耗: 26096K, 提交时间: 2021-11-28 20:37:39

a,b,c,d = map(float, input().split())
x = -100
while x < 100.01:
    y = a*x**3 + b*x**2 + c * x + d
    if -0.01< y < 0.01:
        print("%.2f" % x, end=" ")
    x = x + 0.01

Python3 解法, 执行用时: 60ms, 内存消耗: 4544K, 提交时间: 2023-03-11 17:15:27

a,b,c,d=map(float,input().split())
x=-100
while x<=100:
    if -0.01<a*x**3+b*x**2+c*x+d<0.01:
        print("%.2f"%x,end=" ")
    x+=0.01

上一题