

转载自: https://www.luogu.com.cn/problem/solution/P1024?page=4
#include<bits/stdc++.h>
using namespace std;
double a,b,c,d,A,B,T,ac,x1,x2,x3;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>a>>b>>c>>d;
A=b*b-3*a*c;
B=b*c-9*a*d;
T=(2*A*b-3*a*B)/(2*sqrt(A*A*A));
ac=acos(T);
x1=(-b-sqrt(A)*cos(ac/3)*2)/3/a;
x2=(-b+sqrt(A)*(cos(ac/3)-sqrt(3)*sin(ac/3)))/(3*a);
x3=(-b+sqrt(A)*(cos(ac/3)+sqrt(3)*sin(ac/3)))/(3*a);
cout<<setprecision(2)<<fixed<<x1<<" "<<setprecision(2)<<fixed<<x2<<" "<<setprecision(2)<<fixed<<x3;
}
模板:
#include <iostream>
#include <iomanip>
#include <cmath>
#define A (b*b-3*a*c)
#define B (b*c-9*a*d)
#define C (c*c-3*b*d)
#define D (B*B-4*A*C)
#define T ((2*A*b-3*a*B)/(2*sqrt(pow(A, 3))))
// 根据盛金公式公式求解,因为x1, x2, x3均不相同,只用考虑一种情况
#define X1 (-b-2*sqrt(A)*cos(acos(T)/3))/(3*a)
#define X2 (-b+sqrt(A)*(cos(acos(T)/3)-sqrt(3)*sin(acos(T)/3)))/(3*a)
#define X3 (-b+sqrt(A)*(cos(acos(T)/3)+sqrt(3)*sin(acos(T)/3)))/(3*a)
using namespace std;
double a, b, c, d;
int main()
{
cin >> a >> b >> c >> d; // 读入a, b, c, d四个实数
cout << setiosflags(ios::fixed) << setprecision(2) << X1 << " " << X2 << " " << X3; // 输出时需注意保留两位小数
return 0;
}
8189

被折叠的 条评论
为什么被折叠?



