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 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号