题意
a
+
b
=
d
a+b=d
a+b=d
a
∗
b
=
d
a*b=d
a∗b=d
T组测试数据,每组给你非负整数
d
d
d,问方程是否存在非负解
a
a
a和
b
b
b,存在输出‘Y’,a,b,否则输出’N’。
思路
b
=
d
−
a
b=d-a
b=d−a
a
∗
(
d
−
a
)
=
d
a*(d-a)=d
a∗(d−a)=d,推得
a
2
−
d
a
+
d
a^2 - da + d
a2−da+d
通过求根公式(
−
b
±
b
2
−
4
a
c
2
a
\frac{-b±\sqrt{b^2-4ac}}{2a}
2a−b±b2−4ac)可得
a
a
a,然后求得
b
b
b。
注意不要对负数开方!!!这种情况无解
如果
a
a
a最大值也是负数,那就无解。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T; scanf("%d", &T);
while (T--)
{
int d; scanf("%d", &d);
if (d*d-4*d < 0) { printf("N\n"); continue; }
double ans = max((d+sqrt(d*d-4.0*d))/2, (d-sqrt(d*d-4.0*d))/2);
if (ans < 0) printf("N\n");
else printf("Y %.9f %.9f\n", ans, d-ans);
}
return 0;
}
/*
7
69
0
1
4
5
999
1000
*/