分治5--一元三次方程求解

分治5--一元三次方程求解

一、心得

一定要先想清楚,套路是固定的

如果有位置不懂,就举例子举出来吧 

先说明等于的情况

然后再是不等于的情况

二、题目及分析

一元三次方程求解

总时间限制: 1000ms 内存限制: 65536kB 
描述 
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。

给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

输入 
一行,包含四个实数a,b,c,d,相邻两个数之间用单个空格隔开。 
输出 
一行,包含三个实数,为该方程的三个实根,按从小到大顺序排列,相邻两个数之间用单个空格隔开,精确到小数点后2位。 
样例输入 
1.0 -5.0 -4.0 20.0 
样例输出 
-2.00 2.00 5.00

三、代码及结果

 1 /*
 2 如果有位置不懂,就举例子举出来吧 
 3 
 4 */ 
 5 #include <iostream>
 6 using namespace std;
 7 
 8 double a,b,c,d;
 9 double f(double x){
10     double f=a*x*x*x+b*x*x+c*x+d; 
11     return f;
12 }
13 
14 //枚举法 从-100,-99.99,...,一直枚举到100 
15 void findAns(){
16     cout<<"枚举:"<<endl; 
17     for(double x=-10000;x<=10000;x++){//10000是为了方便x++,也可(x/100)++ 
18         double x1=x/100-0.005,x2=x/100+0.005;
19         //if(f(x1)*f(x2)<=0)//有错 在99.99的时候,有99.985; 和99.98的时候,也有99.985,
20         // 如果是99.985,那 99.99和99.98都成立 
21         if(f(x1)*f(x2)<0||f(x1)==0)
22             printf("%.2f ",x/100);
23     }
24     cout<<endl;
25 }
26 
27 //分治
28 //这个之前写的有问题 
29 void findAns2(){
30     cout<<"分治:"<<endl; 
31     for(double x=-100;x<=100;x++){
32         double x1=x,x2=x+1;
33         //先输出等于的情况
34         if(f(x1)==0)  printf("%.2f ",x1);
35         else if(f(x1)*f(x2)<0){//符合条件 
36             while(x2-x1>=0.001){
37                 double mid=(x1+x2)/2;
38                 if(x1*mid<=0) x2=mid;
39                 else x1=mid;
40             }
41             printf("%.2f ",x1);
42         }
43         
44     } 
45     cout<<endl;
46 } 
47 
48 int main(){
49     cin>>a>>b>>c>>d;
50     findAns();  
51     findAns2();                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
52     return 0;
53 } 

原文地址:https://www.cnblogs.com/Renyi-Fan/p/7138098.html