1. 程式人生 > >一元三次方程

一元三次方程

同一行 提示 int 是我 分享圖片 == include urn opened

題目描述

有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的系數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差的絕對值>=1。要求三個實根。

輸入

四個實數:a,b,c,d

輸出

由小到大依次在同一行輸出這三個實根(根與根之間留有空格),並精確到小數點後2位

樣例輸入

1 -5 -4 20

樣例輸出

-2.00 2.00 5.00

提示

數據規模和約定
|a|,|b|,|c|,|d|<=10

這是道簡單的分治。將問題逐步縮小。 子問題與原問題形式相同,相互獨立,分開後容易被解決,子問題的解可以合並。 技術分享圖片
#include <bits/stdc++.h>

using
namespace std; double a,b,c,d; double fun(double x) { return a*x*x*x+b*x*x+c*x+d; } int main() { double x1,x2,xx; int i; cin>>a>>b>>c>>d; for(i=-100;i<=100;i++){ x1=i,x2=i+1; if(fun(x1)==0){ printf("%.2f ",x1); } else
if(fun(x1)*fun(x2)<0){ while(x2-x1>=0.001){ xx=(x1+x2)/2; if((fun(x1)*fun(xx))<=0) x2=xx; else x1=xx; } printf("%.2f ",x1); } } return 0; }
View Code

然後之所以超時那麽多次

就是我把那個xx在中間定義,反復定義然後超時了

用cin挺安全,沒啥問題

一元三次方程