我用的代码明明过了这道题,但是我自己用的话却有问题
当我输入 1 0 -1 0时 结果只有-1,但是应该有 -1 0 1 代码如下
#include<iostream>
#include<math.h>
#include<set>
using namespace std;
//二分法
float a,b,c,d;
set<float> vc;
float func(float x){
return a*x*x*x+b*x*x+c*x+d;
}
void er_f(float left,float right,int ge){
if(ge==0)return;
if(abs(left-right)<=0.005){
if(ge==1)
vc.insert(left);
return;
}
float x1=func(left);
float x2=func((right+left)/2);
float x3=func(right);
int w1=0,w2=0;
if(ge==3){
if((x1>=0&&x2>=0&&x3>=0)||(x1<=0&&x2<=0&&x3<=0)){
//no
return;
}
if((x1>=0&&x2>=0&&x3<=0)||(x1<=0&&x2<=0&&x3>=0)){
w1=0;
w2=3;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
w1=2;
w2=1;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
}
if((x1>=0&&x2<=0&&x3>=0)||(x1<=0&&x2>=0&&x3<=0)){
//no
return;
}
if((x1>=0&&x2<=0&&x3<=0)||(x1<=0&&x2>=0&&x3>=0)){
w1=3;
w2=0;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
w1=1;
w2=2;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
}
}else if(ge==2){
if((x1>=0&&x2>=0&&x3>=0)||(x1<=0&&x2<=0&&x3<=0)){
w1=0;
w2=2;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
w1=2;
w2=0;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
}
if((x1>=0&&x2>=0&&x3<=0)||(x1<=0&&x2<=0&&x3>=0)){
return;
//no
}
if((x1>=0&&x2<=0&&x3>=0)||(x1<=0&&x2>=0&&x3<=0)){
w1=1;
w2=1;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
}
if((x1>=0&&x2<=0&&x3<=0)||(x1<=0&&x2>=0&&x3>=0)){
return;
//no
}
}
else if(ge==1){
if((x1>=0&&x2>=0&&x3>=0)||(x1<=0&&x2<=0&&x3<=0)){
return;
//no
}
if((x1>=0&&x2>=0&&x3<=0)||(x1<=0&&x2<=0&&x3>=0)){
w1=0;
w2=1;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
}
if((x1>=0&&x2<=0&&x3>=0)||(x1<=0&&x2>=0&&x3<=0)){
return;
//no
}
if((x1>=0&&x2<=0&&x3<=0)||(x1<=0&&x2>=0&&x3>=0)){
w1=1;
w2=0;
er_f(left,(right+left)/2,w1);
er_f((left+right)/2,right,w2);
}
}
}
int main(){
int left=-100,right=100;
cin>>a>>b>>c>>d;
er_f(left,right,3);
set<float>::iterator it=vc.begin();
for(int i=0;i<vc.size();i++){
printf("%.2f ",*it);
it++;
}
}
最后我找到了问题是>=与<=不能同时用,必须是>和<=或者是<=和>。