Codeforces ~ 1076C ~ Meme Problem (一元二次方程求解)

在这里插入图片描述
在这里插入图片描述

题意

a + b = d a+b=d a+b=d
a ∗ b = d a*b=d ab=d
T组测试数据,每组给你非负整数 d d d,问方程是否存在非负解 a a a b b b,存在输出‘Y’,a,b,否则输出’N’。

思路

b = d − a b=d-a b=da
a ∗ ( d − a ) = d a*(d-a)=d a(da)=d,推得 a 2 − d a + d a^2 - da + d a2da+d
通过求根公式( − b ± b 2 − 4 a c 2 a \frac{-b±\sqrt{b^2-4ac}}{2a} 2ab±b24ac )可得 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
*/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值