Dedede King 2022-01-17 07:25 采纳率: 100%
浏览 90
已结题

关于一元二次方程问题(C++)

一元二次方程求根
时间限制:1Sec内存限制:128MB

题目描述

根据给定的a,b,c的值求解方程ax^2+bx+c=0的根。

输入

输入有n+1行,第一行是一个int值,表示测试数据的组数。下面有n行,每行有三个实数,分别为a,b,c的值,用空格隔开。

输出

输出有n行,分别对应输入的每组a,b,c的值输出的结果,每一行具体格式为:
a) 如果方程有两个实根,按从小到大的顺序输出这两个实根,精确到小数点后3位。
b) 如果方程有一个实根,输出这一个实根,精确到小数点后3位。
c) 如果方程没有实根,输出"No real."。
d) 如果方程没有根,输出"No answer."。
e) 如果方程有无穷多根,输出"Inf."。

样例输入

5
1 3 2
1 2 1
1 2 8
0 0 4
0 0 0

样例输出

-2.000 -1.000
-1.000
No real.
No answer.
Inf.

我的初步答案

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
    int d;
    cin >> d;
    for (int i = 0; i < d; i++)
    {
        double a, b, c, x, y,l,x1,x2,x3,x4;
        cin >> a >> b >> c;
        if ((a != 0 && b != 0)||a!=0)
        {
            l = b * b - 4 * a*c;
            x1 = (-b - sqrt(b*b - 4 * a*c)) / 2 * a;
            x2 = (-b + sqrt(b*b - 4 * a*c)) / 2 * a;
            x3 = -b / (2 * a);
            if (l > 0)
                cout << fixed << setprecision(3) << x1 << " " << x2 << endl;
            else if (l == 0)
                cout << fixed << setprecision(3) << x3 << endl;
            else if(l<0)
                cout << "No real." << endl;
        }
        if (a == 0 && b == 0 && c == 0)
            cout << "Inf." << endl;
        else if (( a == 0 && b == 0)||(a==0))
           cout << "No answer." << endl; 
    }
    return 0;
}

输入输出都对上了,但结果还是错的

展开全部

  • 写回答

2条回答 默认 最新

  • 关注

    else if (( a == 0 && b == 0)||(a==0))这里逻辑是错的,a==0,b不等于0的时候,是有解的。
    代码修改如下:

    #include<iostream>
    #include<cmath>
    #include<iomanip>
    using namespace std;
    int main()
    {
        int d;
        cin >> d;
        for (int i = 0; i < d; i++)
        {
            double a, b, c, x, y,l,x1,x2,x3,x4;
            cin >> a >> b >> c;
            if (a==0 &&b==0)
            {
                if(c==0)
                    cout<<"Inf."<<endl;
                else
                    cout <<"No answer."<<endl;
            }else 
            {
                if (a==0)
                    cout << fixed << setprecision(3) << -c/b << endl;
                else
                {
                    l = b*b - 4*a*c;
                    if(l<0)
                        cout << "No real." << endl;
                    else if(l==0)
                        cout << fixed << setprecision(3) <<  -b / (2 * a) << endl;
                    else
                    {
                        x1 = (-b - sqrt(b*b - 4 * a*c)) / 2 * a;
                        x2 = (-b + sqrt(b*b - 4 * a*c)) / 2 * a;
                        cout << fixed << setprecision(3) << x1 << " " << x2 << endl;
                    }
                }
            }
        }
        return 0;
    }
    
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    Dedede King 2022-01-17 07:37

    答案还是错的😭

    1
    回复
    技术专家团-小桥流水 回复 Dedede King 2022-01-17 07:45

    代码修改了贴在上面了,你用上面的代码试试。

    1
    回复
    Dedede King 回复 技术专家团-小桥流水 2022-01-17 07:53

    编译没问题,但还是显示错误结果

    1
    回复
    展开全部14条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月17日
  • 创建了问题 1月17日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部