50分,2,4不通过,求助大佬
查看原帖
50分,2,4不通过,求助大佬
1292265
Zzz123456789101112楼主2024/3/26 17:55
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double a, b, c, d;
double f(int x) {
	return a * pow(x, 3) + b * pow(x, 2) + c * x + d;
}
void find(double l, double r) {
	if(r-l<0.001){
		cout << fixed << setprecision(2) << r<<' ';
		return;
	}
	double mid = (l + r) / 2;
	if (f(mid) == 0) {
		cout << fixed << setprecision(2) << mid<<' ';
		return;
	}
	if (f(mid) * f(l) < 0) find(l,mid);
	else find(mid,r);
	
}
int main() {
	int mark = 0;
	cin >> a >> b >> c >> d;
	for (double i = -100; i < 100, mark != 3;i++) {
		//找到一个区间(i,i+1),使得f(i)=0或f(i)*f(i+1)<0
		if (f(i) == 0) {
			cout << fixed << setprecision(2) << i<<' ';
			mark++;
			continue;
		}
		if (f(i) * f(i + 1) < 0) {
			find(i, i + 1);
			mark++;
		}
		//通过二分的方式,找到一个x,并完成计数
	}
	return 0;
}
2024/3/26 17:55
加载中...