社区讨论

50分求改 qwq

P1024[NOIP 2001 提高组] 一元三次方程求解参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m0ne3gsu
此快照首次捕获于
2024/09/04 13:00
2 年前
此快照最后确认于
2025/11/04 21:46
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>

using namespace std;

double a, b, c, d;

double f(double x) {
	return a * x * x * x + b * x * x + c * x + d;
}

int ans = 0;

vector<double> root;

void bi_search(double x, double y) {
	if (ans == 3) {
		return;
	}
	if (f(x) == 0) {
		root.push_back(x);
		ans++;
		return;
	}
	if (f(x) * f(y) < 0) {
		double mid = (x + y) / 2;
		if (f(x) * f(mid) < 0) {
			bi_search(x, mid);
		}
		else {
			bi_search(mid, y);
		}
	}
}


void search()
{
	for (double i = -100; i < 100; i++) {
		if (f(i) == 0) {
			ans++;
			root.push_back(i);
		}
		else {
			bi_search(i, i + 1);
		}
	}
}

int main()
{
	std::cin >> a >> b >> c >> d;

	search();

	for (const auto & r : root) {
		std::cout << fixed << setprecision(2) << r << " ";
	}

	return 0;

}

回复

4 条回复,欢迎继续交流。

正在加载回复...