題目描述
有形如: a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+c^x+d=0 ax3+bx2+cx+d=0一元三次方程。給出該方程中各項的系數(shù) ( a a a, b b b, c c c, d d d 均為實數(shù) ),并約定該方程存在三個不同實根 (根的范圍在 ? 100 -100 ?100至 100 100 100之間 ),且根與根之差的絕對值 ≤ 1 ≤1 ≤1。要求由小到大依次在同一行上輸出這三個實根。
提示
記方程 f ( x ) = 0 f(x)=0 f(x)=0,若存在兩個數(shù) x 1 x_1 x1?和 x 2 x_2 x2?,且 x 1 < x 2 x_1 < x_2 x1?<x2?, f ( x 1 ) × f ( x 2 ) < 0 f(x_1)×f(x_2)<0 f(x1?)×f(x2?)<0,則在 ( x 1 , x 2 ) (x_1,x_2) (x1?,x2?)之間一定有一個根。
輸入輸出格式
輸入格式
輸入 a , b , c , d a,b,c,d a,b,c,d
輸出格式
三個實根(根與根之間留有空格)
輸入輸出樣例
輸入樣例
1 -5 -4 20
輸出樣例
-2.00 2.00 5.00
算法分析
這是一道有趣的解方程題。為了便于求解,設(shè)方程 f ( x ) = a x 3 + b x 2 + c x + d = 0 f(x)=ax^3+bx^2+cx+d=0 f(x)=ax3+bx2+cx+d=0,設(shè)根的值域( ? 100 -100 ?100至 100 100 100之間)中有 x x x, 其左右兩邊相距 0.0005 0.0005 0.0005的地方有 x 1 x_1 x1?和 x 2 x_2 x2?兩個數(shù),即 x 1 = x ? 0.0005 x_1=x-0.0005 x1?=x?0.0005, x 2 = x + 0.0005 x_2=x+0.0005 x2?=x+0.0005。 x 1 x_1 x1?和 x 2 x_2 x2?間的距離( 0.001 0.001 0.001)滿足精度要求(精確到小數(shù)點后 2 2 2位)。文章來源:http://www.zghlxwxcb.cn/news/detail-631125.html
A C 代碼
暴力出奇跡~~文章來源地址http://www.zghlxwxcb.cn/news/detail-631125.html
#include <bits/stdc++.h>
using namespace std;
double a,b,c,d;
int main()
{
cin >>a >>b >>c >>d;
for(double i=-100;i<=100;i+=0.001)
{
double j=i+0.001;
double l=a*i*i*i+b*i*i+c*i+d;
double r=a*j*j*j+b*j*j+c*j+d;
if(l*r<=0)
{
printf("%.2lf ",(i+j)/2);
}
}
return 0;
}
到了這里,關(guān)于一元三次方程求解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!