Dedede King 2022-01-17 15: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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月25日
  • 已采纳回答 1月17日
  • 创建了问题 1月17日

悬赏问题

  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目