[洛谷U62364]三次函数极值

U62364 三次函数极值

题面

给定一个三次函数\(f(x)=a_3x^3+a_2x^2+a_1x+a_0\)
求其极值。

格式

输入包括一行四个整数\(a_3,a_2,a_1,a_0\)

输出包括几个坐标或-1.两个坐标时请先输出横坐标较小的。

样例#1

输入

2 -10 5 1

输出

(0.272233,1.66041)(3.0611,-20.0308)

样例#2

输入

1 0 0 0

输出

-1

数据限制

规模\(a_i\)
40%\([-9,10]\)
60%\([-299,700]\)

分析

当三次函数取得极值时,其导函数\(f'(x)=0\)
所以把三次函数求出导函数后,只需解一个一元二次方程。

解法

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double calc(double x){
    return ((a*x+b)*x+c)*x+d;
}
double l,m,n,delta;
int main(){
    cin>>a>>b>>c>>d;
    l=3*a;
    m=2*b;
    n=c;
    delta=m*m-4*l*n;
    if(delta>0){
        double x1=(-m-sqrt(delta))/(2*l);
        double x2=(-m+sqrt(delta))/(2*l);
        cout<<"("<<x1<<","<<calc(x1)<<")("<<x2<<","<<calc(x2)<<")";
    }else{
        cout<<"-1";
    }
}

数据

转载于:https://www.cnblogs.com/water-lift/p/10400694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值