(╥╯^╰╥) 一元三次方程求解
程序员文章站
2022-05-09 13:33:25
...
Description
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求三个实根。。
Input
输入描述:
四个实数:a,b,c,d
输入样例:
1 -5 -4 20
Output
输出描述:
由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位
输出样例:
-2.00 2.00 5.00
题解:根的范围在-100--100之间,且要精确到后俩位,我们可以把根的范围过大100倍,x1=(x-0.05)/100,x2=(x+0.05)/100,根据根的特点可以确定f(x1)*f(x2)<0,因此遇到这种情况即是满足情况的解。
//枚举
#include<cstdio>
#include<cmath>
#include<cstdlib>
using namespace std;
double a,b,c,d;
int main()
{
double x;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for (x=-100;x<=100;x+=0.01)
{
if (abs(a*x*x*x+b*x*x+c*x+d)<=0.00001)
printf("%.2f ",x);
}
}
//二分
#include <cstdio>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
double ans1, ans2, ans3;
double a, b, c, d;
double l, r, mid;
double f1(double x){
return x*x*x*a + x*x*b + x*c +d;
}
double F(double x, double y){
l = x; r = y;
while(l < r){
mid = (l+r) / 2.0;
double ans1 = f1(l);
double ans2 = f1(mid);
if((ans1*ans2) <= 0)
r = mid;
else
l = mid + 0.00001;
}
return r;
}
int main(){
while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d) != EOF){
for(double i = -100; i <= 100; i++){
double ans1 = f1(i);
double ans2 = f1(i+1);
if(ans1 == 0)
printf("%.2f ",i);
if((ans1*ans2) < 0){
ans1 = F(i, i+1.0);
printf("%.2f ",ans1);
}
}
printf("\n");
}
return 0;
}
//某位大佬
#include<iostream>
#include<string>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
const double eps = 1e-6;//1e-8、1e-6都能ac
double a, b, c, d;
bool isok(double x) {
double res = a * x*x*x + b * x*x + c * x + d;
if (abs(res - 0) < eps)
return true;
else
return false;
}
int main(void) {
scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
vector<double> res;
for (double x = -100.00; x <= 100.00; x += 0.01) {
if (isok(x))
res.push_back(x);
}
for (int i = 0; i < 3; ++i) {
printf("%.2lf", res[i]);
if (i != 2)
printf(" ");
else
printf("\n");
}
return 0;
}
上一篇: Numpy使用小记录
下一篇: web框架-flask方式添加路由
推荐阅读
-
如何用matlab求解线性方程组的符号解?用matlab解符号方程组方法介绍
-
python/sympy求解矩阵方程的方法
-
c语言:求一元二次方程的跟,系数a,b,c由键盘输入
-
Java——(高斯消去法/列主元消去法/LU消去)求解方程
-
一维空间抛物型方程差分法求解-稳定性分析
-
在线一元二次方程计算器实例(方程计算器在线计算)_javascript技巧
-
python 练习题:定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程ax^2+bx+c=0的两个解
-
leetcode-求解方程
-
在线一元二次方程计算器实例(方程计算器在线计算)_javascript技巧
-
c#实现一元二次方程求解器示例分享