1 条题解

  • 0
    @ 2025-8-24 21:03:03

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Nt_Tsumiki
    火星咖啡馆 || 我们终将相遇,在那悠远的苍穹 || xp是傲娇少女 || 绀海厨子捏 || 会不定时红温 || NOIP 2024 全国唯一一个 263 || 我是粘土投诉米奇

    搬运于2025-08-24 21:03:02,当前版本为作者最后更新于2021-07-14 08:18:08,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    upd

    21-10-16:修改了一些错误

    题意

    题目传送门

    指定一个方程:ax2+bx+cax^2+bx+c,现给你 abca、b、c 的值让你求这个方程的根。

    做法

    题意简单明了,很明显需要一个东西:Δ\Delta,这个东西叫做判别式,是用来判断求公式是否成立,我们记 Δ=b24ac\Delta=b^2-4ac,当 Δ>0\Delta>0Δ=0\Delta=0 时成立,当 Δ<0\Delta<0 时不成立,至于为什么可以参考题目中的求根公式:

    • x1=b+Δ2ax_1=\dfrac{-b+\sqrt{\Delta}}{2a}

    • x2=bΔ2ax_2=\dfrac{-b-\sqrt{\Delta}}{2a}

    可以发现因为 Δ\Delta 在根号下所以不能小于零,这样这道题也就解出来了,上代码:

    Code

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    
    using namespace std;
    double a,b,c;
    
    int main() {
        cin>>a>>b>>c;
        double delta=b*b-4*a*c;
        if (delta>0) {
            double x1=(-b+sqrt(delta))/(2*a);
            double x2=(-b-sqrt(delta))/(2*a);
            if (x1>x2) {
                swap(x1,x2);
            }
            printf("x1=%.5lf;x2=%.5lf",x1,x2);
        } else if (delta==0) {//delta为零其根也为零,所以x1=x2
            double x1=(-b+sqrt(delta))/(2*a);
            double x2=(-b-sqrt(delta))/(2*a);
            printf("x1=x2=%.5lf",x1);
        } else {
            cout<<"No answer!";//delta小于零
        }
        return 0;
    }
    
    • 1

    信息

    ID
    6910
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    2
    已通过
    1
    上传者