洛谷P1024[NOIP2001 提高组] 一元三次方程求解(cpp)(二分查找)

news2025/5/26 8:30:49

目录

1.题目

2.思路

3.AC


1.题目

# [NOIP2001 提高组] 一元三次方程求解

## 题目描述

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

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

## 输入格式

一行,4 个实数 a, b, c, d。

## 输出格式

一行,3 个实根,从小到大输出,并精确到小数点后 2 位。

## 样例 #1

### 样例输入 #1

```
1 -5 -4 20
```

### 样例输出 #1

```
-2.00 2.00 5.00
```

## 提示

**【题目来源】**

NOIP 2001 提高组第一题

2.思路

①a>0时,若 ax^{3}+bx^{2}+cx+d=0 有三个实根,则图像为

图像与x轴的三个交点即为方程的三个根。将方程化为三个区间〔-100,t1〕,〔t1,t2〕,〔t2,100〕,利用二分查找就可以得到答案!

②如何得到t1,t2的值?对原方程求导,得到的导函数为y=3ax^{2}+2bx+c,图像为

将方程化为两个区间〔-100,t0〕,〔t0,100〕,再利用二分查找!

③如何求t0?对函数再求导,使导函数为0,得t0 = -\frac{b}{3a}

3.AC

#include <iostream> 
#include <cstdio>
using namespace std;

int main () {
	double a, b, c, d, q[3];
	scanf("%lf%lf%lf%lf", &a, &b, &c, &d);

    //保证a>0
	if (a < 0) {
		a *= -1;
		b *= -1;
		c *= -1;
		d *= -1;
	}

    //求t0
	double t0 = -b/(3*a);

    //求t1
	double l = -100, r = t0;
	while (r - l > 1e-4) {
		double mid = (l+r)/2;
		if (3*a*mid*mid + 2*b*mid +c >= 0) l = mid;
		else r = mid;
	}
	double t1 = l;

	//求t2
	l = t0, r = 100;
	while (r - l > 1e-4) {
		double mid = (l+r)/2;
		if (3*a*mid*mid + 2*b*mid +c >= 0) r = mid;
		else l = mid;
	}
	double t2 = l;
	
    //求三个根
	l = -100, r = t1;
	while (r - l > 1e-4) {
		double mid = (l+r)/2;
		if (a*mid*mid*mid + b*mid*mid +c*mid + d >= 0) r = mid;
		else l = mid;
	}
	printf("%.2lf ", l);
	
	l = t1, r = t2;
	while (r - l > 1e-4) {
		double mid = (l+r)/2;
		if (a*mid*mid*mid + b*mid*mid +c*mid + d >= 0) l = mid;
		else r = mid;
	}
	printf("%.2lf ", l);
	
	l = t2, r = 100;
	while (r - l > 1e-4) {
		double mid = (l+r)/2;
		if (a*mid*mid*mid + b*mid*mid +c*mid + d >= 0) r = mid;
		else l = mid;
	}
	printf("%.2lf", l);

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1355649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32实战之su-03t语音模块固件的制作与烧录

目录 su-03t简介 管脚定义 ​​智能公元语音固件制作​​ 账号注册 创建产品 产品配置 唤醒词自定义 命令词自定义 发音人配置 其他配置 生成和下载语音固件 固件烧录 下载SDK固件烧录工具 SU-03T驱动分享 su-03t简介 SU-03T 是一款低成本、低功耗、小体积的离线…

巨杉数据库荣登2023胡润全球猎豹企业榜

胡润研究院与广州南沙联合发布《2023胡润全球猎豹企业榜》&#xff0c;这是胡润研究院首次发布“全球猎豹企业”。榜单列出了全球成立于2000年后&#xff0c;五年内最有可能达到独角兽级十亿美金估值的高成长性企业。巨杉数据库凭借在分布式文档型数据库领域的创新突破&#xf…

本地监控jar包可视化性能数据

一、机器申请 二、maven项目jar打包 三、机器性能监控 1.jdk版本配置 本地下载的机器虽自带jdk&#xff0c;但是jdk版本过低&#xff0c;需重新安装jdk 参考&#xff1a; Linux系统安装JDK1.8 详细流程_linux安装jdk1.8-CSDN博客 2.jvm参数修改 需修改jvm堆内存 栈内存信…

【Java期末】学生成绩管理系统

诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源下载地址&#xff1a;https://download.csdn.net/download/weixin_47040861/88697244 —————…

环境监测LoRa网关解决方案应用空气质量监控

随着全球工业化和城镇化的快速发展&#xff0c;空气质量问题越来越受到关注。环境监测技术的发展&#xff0c;可以有效地帮助我们监测和改善空气质量。而LoRa网关则是一种可以帮助我们实现远距离、低功耗通信的无线通信技术&#xff0c;它的应用可以为空气质量监测提供解决方案…

Linux软连接的创建、删除、修改

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 软连接介绍 软链接&#xff08;Soft Link&#xff09;也称为符号链接&#xff08;Symbolic Link&#xff09;.Linux里面的软链接…

Python+Selenium+ChromeDriver的配置和问题解决

安装前的准备 1.python的安装和配置 在Window下&#xff1a;在开始菜单中找到运行输入cmd或直接搜索cmd点击进入&#xff0c;输入python&#xff0c;如果出现下图中的>>>则证明Python安装成功。 检测Chrome的版本号安装Chromedriver 记录版本号&#xff1a; 87.0.42…

学习华为企业无线网络,有这篇文章就够了(一)

华为HCIA视频教程&#xff1a;超级实用&#xff0c;华为VRP系统文件详解 华为HCIA视频教程&#xff1a;不会传输层协议&#xff0c;HCIA都考不过 华为HCIA视频教程&#xff1a;网络工程师的基本功&#xff1a;网络地址转换NAT 华为HCIP视频教程&#xff1a;DHCP协议原理与配…

Django 6 后台与便签

1. 什么是后台管理 后台管理是网页管理员利用网页的后台程序管理和更新网站上网页的内容。各网站里网页内容更新就是通过网站管理员通过后台管理更新的。 2. 创建超级用户 1. python .\manage.py createsuperuser 2. 输入账号密码等信息 Username (leave blank to use syl…

SparkGraphX 基础解析(五)

1、Spark GraphX概述 1.1什么是Spark GraphX Spark GraphX是一个分布式图处理框架&#xff0c;它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口&#xff0c;极大的方便了对分布式图处理的需求。 那么什么是图&#xff0c;都计算些什么&#xff1f;众所周知社交…

面试算法88:爬楼梯的最少成本

题目 一个数组cost的所有数字都是正数&#xff0c;它的第i个数字表示在一个楼梯的第i级台阶往上爬的成本&#xff0c;在支付了成本cost[i]之后可以从第i级台阶往上爬1级或2级。假设台阶至少有2级&#xff0c;既可以从第0级台阶出发&#xff0c;也可以从第1级台阶出发&#xff…

SpringBoot-搭建集成Mybatis的项目

本文介绍了如何在IntelliJ IDEA中使用SpringBoot和Mybatis构建Java Web应用程序。通过本文的学习&#xff0c;读者将了解如何使用IntelliJ IDEA快速搭建一个基于SpringBoot和Mybatis的Java Web应用程序&#xff0c;提高开发效率。IntelliJ IDEA是一款功能强大的Java集成开发环境…

训练过程中验证精度高于训练精度可能的原因

可能的原因&#xff1a; 1. 在数据集很大的时候&#xff0c;loss下降很明显。train loss是平均一个epoch内的所有loss&#xff0c;比如第一个epoch的loss是2.3,2.2,2.1...0.7,0.6 平均train loss是1.5&#xff0c; 而val的时候是用已经训练了一个epoch的model进行测试的&…

【NP】规约与问题复杂度

目录 多项式时间规约复杂度类 多项式时间规约 Polynomial-Time Reductions &#xff1a;如果问题 Y Y Y 的任意实例可以通过多项式次数的标准计算步骤&#xff0c;加上对解决问题 X X X 的黑盒的多项式次数调用来解决&#xff0c;那么称问题 Y Y Y 可以在多项式时间归约为问…

网络爬虫之金融数据前后端实现

基金监控项目实战 一 设计思想 爬虫 采集基金公司的数据 单线程爬虫&#xff0c;用requests进行处理 web开发 前端 负责页面的设计的设计 HTMLCSSJavaScriptecharts 后端 负责调用爬虫获取数据&#xff0c;传输给前端 Flask框架 流程思维导图&#xff1a; 二 前端设计 …

【AI】使用LoFTR进行图像匹配测试Demo

LoFTR图像匹配的源码解析我们在上篇文章中已经写了&#xff0c;对于怎么试用一下&#xff0c;我这边再啰嗦一下。 0.环境搭建 详细的搭建教程请点击链接查看&#xff0c;这里只对需要特殊注意的地方做阐述 1.创建的Python环境采用python3.8的环境&#xff0c;因为文章发布较早…

CMake入门教程【核心篇】添加库(add_library)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 基本用法2.STATIC…

DevOps(3)

目录 11.描述root账户&#xff1f; 12.如何在发出命令时打开命令提示符&#xff1f; 14.Linux系统下交换分区的典型大小是多少&#xff1f; 15.什么是符号链接&#xff1f; 11.描述root账户&#xff1f; root账户就像一个系统管理员账户&#xff0c;允许你完全控制系统。 …

[DevOps-03] Build阶段-Maven安装配置

一、简要说明 下载安装JDK8下载安装Maven二、复制准备一台虚拟机 1、VM虚拟复制克隆一台机器 2、启动刚克隆的虚拟机,修改IP地址 刚刚克隆的虚拟机 ,IP地址和原虚拟的IP地址是一样的,需要修改克隆后的虚拟机IP地址,以免IP地址冲突。 # 编辑修改IP地址 $ vi /etc/sysconfig…

6. Mybatis 缓存

6. Mybatis 缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率MyBatis系统中默认定义了两级缓存 一级缓存二级缓存 默认情况下&#xff0c;只有一级缓存&#xff08;SqlSession级别的缓存&#xff0c;也称为本地缓存&…