建议加强数据
查看原帖
建议加强数据
394295
nknk楼主2022/1/17 21:29

我用的代码明明过了这道题,但是我自己用的话却有问题

当我输入 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++;
	}
}
                           最后我找到了问题是>=与<=不能同时用,必须是>和<=或者是<=和>。
2022/1/17 21:29
加载中...