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

本文介绍了一种通过枚举法和分治法解决特定条件下的一元三次方程求解问题的方法。针对存在三个不同实根且根的范围限定在-100至100之间的方程,给出了具体的C++实现代码。

分治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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值