[NOIP2001]一元三次方程求解 (nowcoder.com)
注意题目中提示的那一句话
#include<stdio.h> double a, b, c, d; double count(double x) //计算函数 { return a*x*x*x+b*x*x+c*x+d; } int main() { scanf("%lf %lf %lf %lf", &a, &b, &c, &d); double i = 0; for(i=-100;i<=100;i++) //列举,两解差>1 { double l=i,r=i+1; //相距1的两点 if(count(l)==0) //x为解,y为解在下一循环判断 printf("%.2f ",l); else if(count(l)*count(r)<0) //x y间有解 { while(r-l>=0.001)//精度控制 二分(好像高中数学讲方程的解法时讲过取中点的方法) { double t=(l+r)/2; //取中点 if(count(l)*count(t)<=0) r=t; //解(x,t]————看一下题目中的提示 else l=t; //f(x)*f(t)>0 解(t,y) } printf("%.2f ",l); //输出x } } return 0; }