• 洛谷题解 P1024 【一元三次方程求解】


    原题传送门

    题目描述

    有形如:ax3+bx2+cx1+dx0=0这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

    提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根。

    输入格式

    一行,44个实数A,B,C,DA,B,C,D。

    输出格式

    一行,33个实根,并精确到小数点后22位。

    输入输出样例

    输入 #1

    1 -5 -4 20

    输出 #1

    -2.00 2.00 5.00
    --------------------------------------------以下为题解部分-----------------------------------------------

    分析:

    思路:

    首先这个题是一道数学题,要求是求出实根,所以我们自然而然的想起一种玄学的方法,那就是——

    暴力枚举法

    对于这个题来说,数据范围表明了实根的范围在-100和100之间,枚举的话,不会爆,只不过慢点罢了

    But

    这个题有一个要注意的地方,枚举时精度要到0.001,要不然就。。。。。。
    不多说,上AC代码

    代码:

    #include<iostream>
    #include<iomanip>
    #include<cmath>
    using namespace std;
    int main(){
    	ios::sync_with_stdio(false);
    	double a,b,c,d;
        cin>>a>>b>>c>>d;
        for(double i=-100;i<=100;i+=0.001){			//枚举所有可能的根 。 
            if(fabs(i*i*i*a+i*i*b+i*c+d)<0.0001)	//计算绝对值,若这个式子的结果的绝对值小于0.001, 
            										//(即<枚举精度),则为方程的一个根。 
                cout<<fixed<<setprecision(2)<<i<<" ";
        }
        return 0;
    }
    
    本文欢迎转载,转载时请注明本文链接
  • 相关阅读:
    20150119--无限级分类+商品分类-02
    20150119--无限级分类+商品分类 01
    20150117--SQL注入+验证码类-02
    20150117--SQL注入+验证码类
    20150116--Cookie+Session-02
    20150116--Cookie+Session
    20150115--SHOP项目架构+后台权限管理-02
    20150115--SHOP项目架构+后台权限管理
    20150113--PDO增删改查+封装PDO类-02
    20150113--PDO增删改查+封装PDO类
  • 原文地址:https://www.cnblogs.com/-pwl/p/12287744.html
Copyright © 2020-2023  润新知