欢迎来看:[二分](https://blog.csdn.net/2301_81328824/article/details/135178234)
解题思路:
考虑使用二分的方法求解,引出零点存在性定理:若f(a) * f(b) < 0 (a<b),则在(a,b)上 至少存在一个解。
一个定义在实数区间上的二分呼之欲出:如果终点的函数值和某点的正负性相同,那么零点一定在中点的另一侧。
注意:函数的单调性 和 “条件”的单调性无关
所以我们从最左边开始枚举每一个数,把这一个数当做[a,a+1]的一个区间,来进行求解
如果端点是解,那么直接输出即可,
否则 如果满足零点定理,那么就把这个区间再细分求解,
输出L即可。
AC(经供参考)
```c
#include<stdio.h>
#include<iostream>
using namespace std;
double a,b,c,d;
double f(double x){
return (a*x*x*x + b*x*x + c*x +d);
}
int main(){
cin>>a>>b>>c>>d;
for(int i=-100;i<=100;i++){ //一个点一个点的试,看是否可能存在根,若存在 则细分求解
double L = i, R = i + 1,mid;
if(fabs(f(L)) < 1e-4) //左端点是根
printf("%.2lf ",L);
else if(fabs(f(R)) < 1e-4) //右端点是根,这里跳过的原因是放置得到重复解
continue;
else if(f(L) * f(R) < 0){ //有根
while(R - L >1e-4){
mid = (L + R) / 2;
if(f(mid) * f(R) > 0)
R = mid;
else L = mid;
}
printf("%.2lf ",L);
}
}
return 0;
}
```
by timmyliao @ 2024-01-14 08:25:21
@[zuijiubugui](/user/1122555) 你可以牛顿法+暴力枚举:
```cpp
#include<bits/stdc++.h>
using namespace std;
double xs[105];
double dxs[105];
int n;
double qpow(double x,int n){
double res=1.000;
while(n){
if(n&1)res*=x;
x*=x;
n>>=1;
}
return res;
}
double f(double x){
double res=0.000;
for(register int i=0;i<=n;i++)res=res+(double)(qpow(x,i)*(double)xs[i]);
return res;
}
double f_(double x){//f'(x)用f_(x)代替
double res=0.000;
for(register int i=0;i<=n-1;i++)res+=(double)(qpow(x,i)*(double)dxs[i]);
return res;
}
int main(){
n=3;//n是最高次数
for(register int i=n;i>=0;i--){
cin>>xs[i];
if(i!=0)dxs[i-1]=xs[i]*(double)i;//求导,注意任意常数导数为0
}
double x0=100.00;/*x0是初始近似解,可以调整*/
while(abs(f(x0))>1e-6){
double tmp=x0;
x0-=(f(tmp)/f_(tmp));//求近似解,控制精度误差
}
double p=1.0;
double x1=x0-p;
while(1){
x1=x0-p;
if(abs(f(x1))<1e-6)break;
p+=0.01;
}
p=1.0;
double x2=x1-p;
while(1){
x2=x1-p;
if(abs(f(x2))<1e-6)break;
p+=0.01;
}
printf("%.2lf %.2lf %.2lf",x2,x1,x0);
}
```
by CEFqwq @ 2024-01-14 09:49:27
@[timmyliao](/user/1095093) ?
by zuijiubugui @ 2024-01-14 14:57:39
@[爱肝大模拟的tlxjy](/user/482610) ?
by zuijiubugui @ 2024-01-14 14:57:54
@[zuijiubugui](/user/1122555) 问题已经解决 是本人的失误
调试出来是-4.4……e-16 也相当于提醒大家不要急躁了 影响思考?
by zuijiubugui @ 2024-01-14 15:00:12