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

这篇具有很好参考价值的文章主要介绍了P1024 [NOIP2001 提高组] 一元三次方程求解题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

有形如:P1024 [NOIP2001 提高组] 一元三次方程求解题解,二分查找与二分答案,算法,c++这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在−100至100之间),且根与根之差的绝对值≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

提示:记方程,若存在2个数和,且​,,则在(,​) 之间一定有一个根。

输入输出格式

输入格式

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

输出格式

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

输入输出样例

输入样例

1 -5 -4 20

输出样例

-2.00 2.00 5.00

解析

此题目考虑使用二分的方法求解。使用零点存在性定理:对连续函数f(x)若有f(a)*f(b)<0(a<b)则f(x)在区间(a,b)上至少存在一个解。这样就可以判断在一个区间中是否有解。

令条件为f(x)>=0,显然在上述区间(a,b)上条件具有单调性:在根的一侧f(x)都是负数,另一侧f(x)都是正数。题目中说明了任意两根之差不小于1,那么可以把[-100,100]等分成若干份[i,i+1)(这里左闭右开是为了防止端点处是零点导致得到重复解)。在每个小段中至多只有一个零点,这意味着这个区间上的条件具有单调性。

于是一个定义在实数区间上的二分方法就得出:如果中点的函数值和某端点的正负性相同,那么零点一定在中点的另一侧。

注意:实数之间不能直接比较是否相等,而是判断之间的差值是否小于eps。

同时二分的次数和精度有关,但是考虑每次二分的区间都可以减少一半,缩减的速度还是很快的,因此也是对数级别。与整数区间二分有一点微妙的区别,实数区间上的二分需要确定好精度。题目要求输出与保留两位小数,那么可以在二分端点相差不超过时停止二分来确保精度。 文章来源地址https://www.toymoban.com/news/detail-831185.html

#include<iostream>
#include<cstdio>
#include<cmath>
#define eps 1e-4
using namespace std;
double a,b,c,d;
double f(double x){
	return a*pow(x,3)+b*pow(x,2)+c*x+d;//计算函数值
}
int main(){
	cin>>a>>b>>c>>d;
	for(int i=-100;i<=100;i++){
		double l=i,r=i+1,mid;
		if(fabs(f(l))<eps){//端点处处理,左闭右开
			printf("%.2lf ",l);
		}
		else if(fabs(f(r))<eps){
			continue;
		}
		else if(f(l)*f(r)<0){//在区间(l,r)上执行二分
			while(r-l>eps){
				mid=(l+r)/2;
				if(f(mid)*f(r)>0){//如果f(mid)和f(r)正负性相同,那么零点在mid左侧
					r=mid;
				}
				else{//否则在另一侧
					l=mid;
				}
			}
			printf("%.2lf ",l);
		}
	}
}

到了这里,关于P1024 [NOIP2001 提高组] 一元三次方程求解题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • P1025 [NOIP2001 提高组] 数的划分(dfs+剪枝 or dp)

    思路:暴力枚举搜索,不过要优雅剪枝一下下 1:处理重复情况--我们只需要然后方取值从前往后的时候呈现递增(可以相等,即不递减) 2:剪枝--基于上思想,剩下的“盘子”里面的数至少都大于等于当前“盘子”的数,所以我们取完当前盘子的数完,就可判断--剩下的盘子

    2024年02月14日
    浏览(34)
  • P1030 [NOIP2001 普及组] 求先序排列

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8≤8)。 共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。 共一行一个字符串,表示一棵二叉树的先序。 输入 #1 复制 输出 #1 复制

    2023年04月22日
    浏览(41)
  • 信息学奥赛一本通:1316:【例4.6】数的计数(Noip2001)

    【题目描述】 我们要求找出具有下列性质数的个数(包括输入的自然数nn)。先输入一个自然数n(n≤1000)n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 加上数后,继续按此规则进行处理,直

    2024年02月10日
    浏览(50)
  • 【洛谷 P1029】[NOIP2001 普及组] 最大公约数和最小公倍数问题 题解(更相减损术)

    输入两个正整数 x 0 , y 0 x_0, y_0 x 0 ​ , y 0 ​ ,求出满足下列条件的 P , Q P, Q P , Q 的个数: P , Q P,Q P , Q 是正整数。 要求 P , Q P, Q P , Q 以 x 0 x_0 x 0 ​ 为最大公约数,以 y 0 y_0 y 0 ​ 为最小公倍数。 试求:满足条件的所有可能的 P , Q P, Q P , Q 的个数。 一行两个正整数 x 0 , y 0

    2024年02月09日
    浏览(44)
  • P1012 [NOIP1998 提高组] 拼数

    设有 �n 个正整数 �1…��a1​…an​,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 第一行有一个整数,表示数字个数 �n。 第二行有 �n 个整数,表示给出的 �n 个整数 ��ai​。 一个正整数,表示最大的整数 输入 #1 复制 输出 #1 复制 输入 #

    2023年04月08日
    浏览(35)
  • [NOIP2003 提高组] 加分二叉树

    设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di​,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下: subtree 的左子

    2024年02月08日
    浏览(41)
  • NOIP2003提高组T1:神经网络

    [NOIP2003 提高组] 神经网络 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向,兰兰同学在自学了一本神经网络的入门书籍后,提出了一

    2024年01月23日
    浏览(36)
  • P1013 [NOIP1998 提高组] 进制位

    著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。 例如: 其含义为: �+�=�L+L=L,�+�=�L+K=K,�+�=�L+V=V,�+�=�L+E=E �+�=�K+L=K,�+�=�K+K=V,�+�=�K+V=E,�+�=��K+E=KL ⋯⋯ �+�=��E+E=KV 根据这些规则可推

    2023年04月08日
    浏览(37)
  • P1039 [NOIP2003 提高组] 侦探推理

    明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明明的任务就是找出这个罪犯。接着,明明逐个询问每一个同学,被询问者

    2023年04月26日
    浏览(50)
  • P1967 [NOIP2013 提高组] 货车运输 题解

    原题地址 由于题目要求的是使两点之间的最小边权最大,所以可以构造最大生成树(最大生成树一定是最大瓶颈生成树,而瓶颈生成树上两点之间的路径,在原图中的所有路径中,最小边权仍然最大,即满足题目要求,详见 https://oi-wiki.org/graph/mst/#瓶颈生成树 ),答案为最大

    2024年04月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包