这个的话可以不用二分法,直接枚举,就是利用区间取判断,设置一个x,在x1=x-0.05 到x2=x+0.05这个范围之内,如果说f(x1)<0&&f(x2)>0 就是说明 f(x)=0 一定在x1 和 x2之间成立,就输出x即可,
#include<stdio.h> #include<math.h> double n; double f(double x){ return n-x*x*x; } int main(){ scanf("%lf",&n); if(n<0){ n=n*(-1); printf("-"); } for(double x=0;x<=n*100;x++){ double x1=(x-0.5)/10; double x2=(x+0.5)/10; if(f(x1)*f(x2)<0||f(x1)==0){ printf("%.1lf",x/10); } } return 0; }
第二种的话就是利用二分法去实现的,很久之前看过的一个关于三元方程解法的题目可以用在这里做参考,其实大同小异
#include<stdio.h> double n; double f(double x){ return n-x*x*x; } int main(){ scanf("%lf",&n); if(n<0){ n=n*-1; printf("-"); } for(double x=0;x<=n/3;x++){ double x1=x,x2=x+1; if(f(x1)==0){ printf("%.1lf\n",x1); }else if(f(x1)*f(x2)<0){ while(x2-x1>=0.00001){ double xx=(x2+x1)/2; if(f(x1)*f(xx)<=0){ x2=xx; }else{ x1=xx; } } printf("%.1lf\n",x1); } } }