【洛谷 P1024】[NOIP2001 提高组] 一元三次方程求解 题解(数学+二分答案)

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

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

题目描述

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

1 -5 -4 20

样例输出 #1

-2.00 2.00 5.00

提示

【题目来源】

NOIP 2001 提高组第一题


思路

由于根与根之差的绝对值 ≥ 1 \ge 1 1,且根的范围在 − 100 -100 100 100 100 100 之间,故从 -100 遍历到 100。

若 f(l) = 0 则 l 为方程的一个根,则直接输出 l 。

由零点存在性定理,若存在 2 2 2 个数 x 1 x_1 x1 x 2 x_2 x2,且 x 1 < x 2 x_1 < x_2 x1<x2 f ( x 1 ) × f ( x 2 ) < 0 f(x_1) \times f(x_2) < 0 f(x1)×f(x2)<0,则在 ( x 1 , x 2 ) (x_1, x_2) (x1,x2) 之间一定有一个根。

那么将左端点 l 设为 i,右端点 r 设为 i + 1,m 为 l 和 r 的中点。若零点在 l 和 m 之间,则将 r 设为 m,反之则 l 设为 m。用二分法不断逼近零点直到 l 和 r 的差值小于 0.001,输出 r 。

注意:当使用 r - l >= 0.01 作为判断条件,答案会有较大误差,导致WA。所以判断条件应为 r - l >= 0.001。文章来源地址https://www.toymoban.com/news/detail-737343.html


AC代码

#include <iostream>
#include <cmath>
#define AUTHOR "HEX9CF"
using namespace std;

double a, b, c, d;
double x1, x2, x3;

double f(double x)
{
    return a * pow(x, 3) + b * pow(x, 2) + c * pow(x, 1) + d;
}

int main()
{
    cin >> a >> b >> c >> d;

    for (int i = -100, cnt = 0; i < 100 && cnt < 3; i++)
    {
        double l, r;
        l = i;
        r = i + 1;
        if(!f(l)) {
            printf("%.2lf ", l);
            cnt++;
            continue;
        }
        if (f(l) * f(r) < 0)
        {
            while (r - l >= 0.001)
            {
                double m = (l + r) / 2;
                if (f(l) * f(m) < 0)
                {
                    r = m;
                } else {
                    l = m;
                }
            }
            printf("%.2lf ", r);
            cnt++;
        }
    }
}

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

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

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

相关文章

  • P1025 [NOIP2001 提高组] 数的划分———C++(动态规划、DFS)

    将整数 n n n 分成 k k k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。 例如: n = 7 n=7 n = 7 , k = 3 k=3 k = 3 ,下面三种分法被认为是相同的。 1 , 1 , 5 1,1,5 1 , 1 , 5 ; 1 , 5 , 1 1,5,1 1 , 5 , 1 ; 5 , 1 , 1 5,1,1 5 , 1 , 1 . 问有多少种不同的分法。 n , k n,k n , k ( 6 n ≤ 200 6n le

    2024年01月22日
    浏览(37)
  • P1025 [NOIP2001 提高组] 数的划分(dfs+剪枝 or dp)

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

    2024年02月14日
    浏览(34)
  • 【洛谷 P1097】[NOIP2007 提高组] 统计数字 题解(映射)

    注意 :数据可能存在加强。 某次科研调查时得到了 n n n 个自然数,每个数均不超过 1.5 × 1 0 9 1.5 times 10^9 1.5 × 1 0 9 。已知不相同的数不超过 1 0 4 10^4 1 0 4 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 共 n + 1 n+1 n + 1 行。 第一

    2024年02月09日
    浏览(48)
  • 【洛谷 P1003】[NOIP2011 提高组] 铺地毯 题解(数组+贪心算法)

    为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n n n 张地毯,编号从 1 1 1 到 n n n 。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上

    2023年04月24日
    浏览(50)
  • 【洛谷 P1328】[NOIP2014 提高组] 生活大爆炸版石头剪刀布 题解(模拟+向量)

    石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主角之一。 蜥

    2024年02月09日
    浏览(39)
  • 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)
  • [NOIP2002 普及组] 选数#洛谷

    已知 n n n 个整数 x 1 , x 2 , ⋯   , x n x_1,x_2,cdots,x_n x 1 ​ , x 2 ​ , ⋯ , x n ​ ,以及 1 1 1 个整数 k k k ( k n kn k n )。从 n n n 个整数中任选 k k k 个整数相加,可分别得到一系列的和。例如当 n = 4 n=4 n = 4 , k = 3 k=3 k = 3 , 4 4 4 个整数分别为 3 , 7 , 12 , 19 3,7,12,19 3 , 7 , 12 , 19 时,

    2024年01月20日
    浏览(48)
  • [NOIP2009 普及组] 分数线划定#洛谷

    世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的 150 % 150% 150% 划定,即如果计划录取 m m m 名志愿者,则面试分数线为排名第 m ×

    2024年01月17日
    浏览(42)
  • 洛谷P1059 [NOIP2006 普及组] 明明的随机数

    1. 问题描述 2. Input 输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。 3. Output 输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。第 2 行为 M 个用空格隔开的正整数,为从小到大排好序

    2024年02月15日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包