首页 > 代码库 > codevs 1038 一元三次方程求解 NOIP2001提高组
codevs 1038 一元三次方程求解 NOIP2001提高组
题目链接: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 }
codevs 1038 一元三次方程求解 NOIP2001提高组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。