题目意思:给你一个d,d满足a+b=d和a*b=d。如果有这样的a和b就输入Y和对应的a和b,不满足就输出N.误差不超过1e-6.
思路:这题看到a+b和a*b想到的是维达定理。那么就有
x1+x2=-ba\frac{b}{a}ab
x1 *x2=ca\frac{c}{a}ac
原方程化简为x2x^2x2-ba\frac{b}{a}abx+ca\frac{c}{a}ac=0
那么就为x2x^2x2-dx+d=0
求出Δ判断大小然后输出根就行
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cmath>
typedef long long ll;
using namespace std;
double n,d,h;
int main()
{cin>>n;
for(int i=1;i<=n;i++)
{cin>>d;
h=d*d/4-d;
if(h<0)
cout<<"N"<<endl;
else
{h=sqrt(h);
cout<<"Y "<<setprecision(10)<<d/2+h<<" "<<d/2-h<<endl;
}
}
return 0;
}
本文探讨了如何利用二次方程和维达定理解决特定数学问题,即找到满足a+b=d且a*b=d的a和b。通过转换问题为二次方程并求解,展示了算法实现步骤。
1317

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



