测试样例点1: 1 -2 -1 2 答案: -1.00 1.00 2.00 输出和答案完全一样,样例点也一样,但是全wa,目前想不明白原因,求巨佬解答
#pragma warning(disable:4996)
#include <iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
#define LL long long
#define diff 0.005
double a, b, c, d;
double Cal(double x)
{
return a * x * x * x + b * x * x + c * x + d;
}
void Func(double* ans,int&cnt, double l, double r)
{
if (cnt == 3)return;
double left = Cal(l), right = Cal(r);
double mid = l + (r - l) / 2;
if (left == 0)
{
ans[cnt++] = l;
return;
}
if (r-l <= diff)
{
if (left * right < 0)
{
ans[cnt++] = mid;
}
return;
}
Func(ans,cnt,l,mid);
Func(ans, cnt, mid, r);
}
int main()
{
cin >> a >> b >> c >> d;
double ans[3];
int cnt = 0;//根的个数
Func(ans, cnt, -100, 100);
sort(ans, ans + 3, [](double a, double b)
{
return a < b;
});
for (int i = 0; i < 3; i++)
{
printf("%.2llf ", ans[i]);
}
return 0;
}