萌新刚学oi,50分求调orz orz感谢感谢♥
查看原帖
萌新刚学oi,50分求调orz orz感谢感谢♥
908952
Gaozhongsheng楼主2023/7/28 11:13
#include<bits/stdc++.h>
using namespace std;
/*1.存在三个根
  2.根的大小不同
  3.至少存在一个正根和一个负根*/
int a,b,c,d;//系数
int x1,x2,x3;//三个根

//二分查找x1
double findx1(){
	double l=-100,r=0;
	while(l<r){
		double mid=(l+r)/2;
		double ans=mid*mid*mid*a+mid*mid*b+mid*c+d;
		if(ans==0){
			return mid;
		}
		else {
			if(ans>0){
				r=mid;
				
			}
			else l=mid;
		}
	}

}

//二分查找x3
double findx3(){
	double l=0,r=100;
	while(l<r){
		double mid=(l+r)/2;
		double ans=mid*mid*mid*a+mid*mid*b+mid*c+d;
		if(ans==0){
			return mid;
		}
		else {
			if(ans>0){
				r=mid;
				
			}
			else l=mid;
		}
	}
	
}

//查找x2,因为x2在x1和x3之间
double findx2(double x1,double x3){
	double l=x1,r=x3;
	while(l<r){
		double mid=(l+r)/2;
		double ans=mid*mid*mid*a+mid*mid*b+mid*c+d;
		if(ans==0){
			return mid;
		}
		else {
			if(ans<0){
				r=mid;
				
			}
			else l=mid;
		}
	}
}
int main(){
	scanf("%d %d %d %d",&a,&b,&c,&d);
	printf("%.2f %.2f %.2f",findx1(),findx2(findx1(),findx3()),findx3());
	return 0;
}
2023/7/28 11:13
加载中...