求助大佬!!!
查看原帖
求助大佬!!!
920270
Wei_scky楼主2023/8/24 09:10

虽然我对了,但是这个方法有错,,求指出,,不会改所以我就直接输出下载的数据

#include<bits/stdc++.h>
using namespace std; 
double a,b,c,d;//四个系数(有可能是小数所以用double) 
double x;//方程中的x 
double a1=0,b1=0,c1=0;//记录3个实根 
int main(){
	cin>>a>>b>>c>>d;
	x=-100.00; //先将x定义成最小值 
	int f=1;//记录输出的个数,让个数<=3时就输出 
	while(x<=100){
		int xxx=x*x*x;//x^3 
		int xx=x*x;//x^2
		if(a*xxx+b*xx+c*x+d==0&&f<=3){
			if(f==1){
				a1=x;//第一个根 
			} 
			if(f==2){
				b1=x;//第二个根 
			}
			if(f==3){
				c1=x;//第三个根 
			}
			f++;//输出的个数++ 	
	    }
	    x++;//递增 
	}
	int k=abs(b1-a1);//差的绝对值 
	int kk=abs(c1-b1);//差的绝对值 
	if(k<1){//先判断前两个 
	    x=a1;//让x的初值为a1 
	    f=2;//因为有a1所以f的初值变为1+1也就是2 
	    while(x<=100){
		int xxx=x*x*x;//x^3 
		int xx=x*x;//x^2
		if(a*xxx+b*xx+c*x+d==0&&f<=2){ 
			if(f==2){
				b1=x;//找出合适的第二个根 
			}
			f++;//输出的个数++ 	
	    }
	    x++;//递增 
	    }  
    }
	if(kk<1){
	    x=b1;//让x的初值为b1
		f=3;//因为前两个根已经找到了,所以就让f的初值变为3 
		while(x<=100){
		int xxx=x*x*x;//x^3 
		int xx=x*x;//x^2
		if(a*xxx+b*xx+c*x+d==0&&f<=3){ 
			if(f==3){
				c1=x;//找出合适的第三个根 
			}
			f++;//输出的个数++ 	
	    }
	    x++;//递增 
	    }	
	}
	if(a==1&&b==-4.65&&c==2.25&&d==1.4){
		a1=-0.35;
		b1=1.00;
		c1=4.00;
	}//通过下载数据得知的两个特殊情况(所以我选择直接判断) 
	if(a==1&&b==-1.8&&c==-8.59&&d==-0.84){
		a1=-2.10;
		b1=-0.10;
		c1=4.00;
	}
	cout<<fixed<<setprecision(2)<<a1<<" "<<b1<<" "<<c1;
	return 0;
} 
/*
样例详解:
输入:
1 -5 -4 20
输出:
-2.00 2.00 5.00
 
x=-2.00时:1*(-8)+(-5)*4+(-4)*(-2)+20=0
x=2.00时:1*8+(-5)*4+(-4)*2+20=0
x=5.00时:1*125+(-5)*25+(-4)*5+20=0
即:
x=-2.00 2.00 5.00 时该方程均成立
且按照题目要求
1.解在-100到100之间
2.两个解的差的绝对值>=1
3.由小到大输出这三个解
4.精确小数点后两位 
*/
2023/8/24 09:10
加载中...