题目链接:http://codevs.cn/problem/1038/
题解:
嗯,exm?才知道二分隶属搜索专题……
对-100到100枚举,按照题目中的提示,当当fi*fi+1<0时,二分深搜,直到精度达到小数点后4位为止(保守起见),当fi*fi+1=0时,判定i是否为解,否则跳过(如果i和i+1都为解,下一次循环时还会再判断i+1)
1 #include<cstdio> 2 #include<cmath> 3 double a,b,c,d; 4 double f(double x) 5 { 6 return a*x*x*x+b*x*x+c*x+d; 7 } 8 void search(double l,double r) 9 { 10 if(r-l<0.001) 11 { 12 printf("%.2lf ",l); 13 return; 14 } 15 if(f(l)*f(r)<0) 16 { 17 double mid=(l+r)/2; 18 if(f(l)*f(mid)==0) 19 { 20 printf("%.2lf ",l); 21 return; 22 } 23 else if(f(l)*f(mid)<0) 24 { 25 search(l,mid); 26 } 27 else if(f(mid)*f(r)<0) 28 { 29 search(mid,r); 30 } 31 } 32 } 33 int main() 34 { 35 scanf("%lf%lf%lf%lf",&a,&b,&c,&d); 36 for(int i=-100;i<=100;i++) 37 { 38 if(f(i)*f(i+1)<0) 39 { 40 search(i,i+1); 41 } 42 else if(f(i)*f(i+1)==0) 43 { 44 if(f(i)==0)printf("%.2lf ",(double)i); 45 } 46 } 47 return 0; 48 }