天梯赛——一元二次方程求解 (20 分)

传送门

本题目要求一元二次方程ax​2​​+bx+c=0的根,结果保留2位小数。

输入格式:

输入在一行中给出3个浮点系数a、b、c,中间用空格隔开。

输出格式:

根据系数情况,输出不同结果:

1)如果方程有两个不相等的实数根,则按照格式"x1=大根,x2=小根"输出;

2)如果方程有两个不相等复数根,则按照格式"x1=实部+虚部i,x2=实部-虚部i"输出;

3)如果方程有相等根,则输出x1=x2=此根;

4)如果方程退化为一元一次方程,则输出"x=值”。                                  -->    a=0&&b!=0

5)如果系数都为0,则为任意解,输出"Any Answer";

6)如果a和b为0,c不为0,则无解,输出"No Answer"。

7)结果保留两位小数

输入样例1:

1 2 1

输出样例1:

x1=x2=-1.00

输入样例2:

3 4 5

输出样例2:

x1=-0.67+1.11i,x2=-0.67-1.11i

Code:

#include<bits/stdc++.h>
#define eps 1e-9
using namespace std;
typedef long long ll;

int main() {
	double a,b,c;
	cin>>a>>b>>c;
	if(a==0&&b!=0) {
		double as=-c/b;
		printf("x=%.2lf",as);
		return 0;
	}
	if(a==0&&b==0&&c!=0) {
		printf("No Answer");
		return 0;
	}
	if(a==0&&b==0&&c==0) {
		printf("Any Answer");
		return 0;
	}
	double q=b*b-4*a*c;
	int flag=0;
	if(q<0) {
		q=-q;
		flag=1;
	}
	if(q==0) {
		flag=2;
	}
	double x=-b/(2*a);
//	if(x==-0)x=0;  ///写不写都可 数据都过了 
	double x1=sqrt(q)/(2*a);
	double x2=sqrt(q)/(2*a);
	if(flag==1)
		printf("x1=%.2lf+%.2lfi,x2=%.2lf-%.2lfi\n",x,x1,x,x2);
	else if(flag==2)
		printf("x1=x2=%.2lf\n",x);
	else {
		x1+=x;
		x2=x-x2;
		if(x1<x2)///大根在前 
		{
			double t=x1;
			x1=x2;
			x2=t;
		}
		printf("x1=%.2lf,x2=%.2lf\n",x1,x2);
	}
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 此题需要使用一元二次方程公式来解决。 公式为:x1,2 = (-b ± sqrt(b^2 - 4ac)) / 2a 其中,a,b,c别为一元二次方程ax^2 + bx + c = 0的系数。题目中已给出a,b,c的值,我们可以代入公式进行计算。 输入a的值为2,b的值为3,c的值为-1 据公式进行代入计算可得: x1=(-b+sqrt(b^2-4ac))/2a=(-3+sqrt(3^2-4*2*(-1)))/2*2 x2=(-b-sqrt(b^2-4ac))/2a=(-3-sqrt(3^2-4*2*(-1)))/2*2 经过计算,可以得到a=2,b=3,c=-1的一元二次方程ax^2 + bx + c = 0的为: x1 = 0.5 x2 = -1 因此,当输入a的值为2,b的值为3,c的值为-1时,一元二次方程ax^2 + bx + c = 0的为x1为0.5,x2为-1。 ### 回答2: 为了计算一元二次方程,我们需要先判断该方程的判别式的值,即$b^2 - 4ac$的值。如果判别式大于0,则方程有两个不同的实;如果判别式等于0,则方程有一个重;如果判别式小于0,则方程无实,只有复数。具体的代码实现如下: ```python a = float(input("请输入a的值:")) b = float(input("请输入b的值:")) c = float(input("请输入c的值:")) delta = b**2 - 4*a*c # 计算判别式 if delta > 0: x1 = (-b + delta**0.5) / (2*a) x2 = (-b - delta**0.5) / (2*a) print("该方程有两个不同的实:x1=%.2f,x2=%.2f"%(x1, x2)) elif delta == 0: x = -b / (2*a) print("该方程有一个重:x=%.2f"%x) else: real_part = -b / (2*a) imaginary_part = (-delta)**0.5 / (2*a) print("该方程无实,只有两个复:x1=%.2f + %.2fi,x2=%.2f - %.2fi"%(real_part, imaginary_part, real_part, imaginary_part)) ``` 以上代码能够按照输入的a、b、c的值计算一元二次方程,并据判别式的值进行相应输出。在输入完三个值之后,程序自动判断是两个实、一个重还是两个复,并输出方程的值。 ### 回答3: 本题需要用到求一元二次方程的公式: x = (-b ± √(b² - 4ac))/2a 因此,我们需要从键盘任意输入a,b,c的值,并进行计算。 首先,需要在程序中声明三个变量a、b、c,并从键盘输入它们的值。可以使用C++中的cin语句实现,例如: float a, b, c; cin >> a >> b >> c; 接下来,我们需要判断该一元二次方程是否有实数。当判别式D=b²-4ac小于0时,方程无实数。相反,当D等于0时,方程有一个实数;当D大于0时,方程有两个实数。可以使用if语句判断: float D = b * b - 4 * a * c; if (D < 0) { cout << "该一元二次方程无实数" << endl; } else if (D == 0) { float x = -b / (2 * a); cout << "该一元二次方程有一个实数为:" << x << endl; } else { float x1 = (-b + sqrt(D)) / (2 * a); float x2 = (-b - sqrt(D)) / (2 * a); cout << "该一元二次方程有两个实数别为:" << x1 << "和" << x2 << endl; } 最后,需要输出的值。当解为两个实数时,将它们都输出;当解为一个实数时,只输出这个实数;当无解时,输出提示信息。 完整的C++代码: #include <iostream> #include <cmath> using namespace std; int main() { float a, b, c; cout << "请输入一元二次方程ax^2+bx+c=0的系数a、b、c:" << endl; cin >> a >> b >> c; float D = b * b - 4 * a * c; if (D < 0) { cout << "该一元二次方程无实数" << endl; } else if (D == 0) { float x = -b / (2 * a); cout << "该一元二次方程有一个实数为:" << x << endl; } else { float x1 = (-b + sqrt(D)) / (2 * a); float x2 = (-b - sqrt(D)) / (2 * a); cout << "该一元二次方程有两个实数别为:" << x1 << "和" << x2 << endl; } return 0; }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵩韵儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值