首页 > 其他分享 >2. [NOIP2001 提高组] 一元三次方程求解

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

时间:2022-08-21 20:22:21浏览次数:65  
标签:一元 %. NOIP2001 输出 double 0.01 求解

试题描述:
enter image description here

输入

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

输出

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

样例输入
1 -5 -4 20
样例输出
-2.00 2.00 5.00


错误代码如下(会没有输出)
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     double a,b,c,d;
 6     cin>>a>>b>>c>>d;
 7     double j;
 8     for(double i=-100;i<=100;i+=0.01)
 9     {
10         j=i+0.01;
11         if(a*i*i*i+b*i*i+c*i+d==0)
12             printf("%.2lf ",i);
13     }
14     return 0;
15 }
16 //精度缺失 

注意,第11 行写成 if(a*i*i*i+b*i*i+c*i+d==0) 是错误的

因为我们设置的是double类型,而计算机在处理不同类型的数时会造成精度缺失

又因为题目告诉我们精确到0.01

所以我们得到以下两种解法

1 if(a*i*i*i+b*i*i+c*i+d<0.01&&a*i*i*i+b*i*i+c*i+d>-0.01)
2     printf("%.2lf ",i);

或根据一元三次函数增长的连续性,即<0和>0中间插着==0

 1     double j;
 2     for(double i=-100;i<=100;i+=0.01)
 3     {
 4         j=i+0.01;
 5         if(a*i*i*i+b*i*i+c*i+d<0.01&&a*i*i*i+b*i*i+c*i+d>-0.01)
 6             printf("%.2lf ",i);
 7         else
 8          if((a*i*i*i+b*i*i+c*i+d<0&&a*j*j*j+b*j*j+c*j+d>0)
 9          ||(a*i*i*i+b*i*i+c*i+d>0&&a*j*j*j+b*j*j+c*j+d<0))
10         printf("%.2lf ",i+=0.01);
11     }

 

标签:一元,%.,NOIP2001,输出,double,0.01,求解
From: https://www.cnblogs.com/xdzxxintong/p/16610755.html

相关文章

  • [NOIP2001 提高组] 一元三次方程求解
    以0.01精度在[-100,100]枚举根。#include<iostream>#include<iomanip>intmain(){doublea,b,c,d;std::cin>>a>>b>>c>>d;for(doublex=-100.0;x<=100.......
  • 通信中的数学优化| 分式规划求解和速率最大化问题(非凸)
    前言记录遇到的通信中的数学优化方法。本文所介绍的是分式规划(FractionalProgramming,FP)在以和速率最大化为目标的波束赋形问题求解中的应用。其关键思想有二:利用Lagr......
  • 1026 [NOIP2001]Car的旅行路线 标点建图 勾股定理 floyd
     链接:https://ac.nowcoder.com/acm/contest/26077/1026来源:牛客网题目描述又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个......
  • 一元多项式求导
    设计函数求一元多项式的导数。输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出......
  • [NOIP2001 普及组] 求先序排列
    试题分析:题目中提及了树的先序,中序,后序排列,所以我们需要先知道这三种排列是什么意思。二叉树的3种(深度优先)排列:先序排列,“根左右”。即对于二叉树的每一个子树,先访问其根......
  • [NOIP2001 普及组] 数的计算
    试题分析:以4为例子:4后面可以跟上1,2组成14,24。14后面跟不了,24可以跟上1组成124,再加上4本身就可以得到4的种类:14,24,124,4。而我们只要算出1,2的种类就可以加起来得到4......
  • [NOIP2001 提高组] 一元三次方程求解
    首先输入系数根据提示:三个实根之差绝对值均>=1......求解最后输出三个实根代码:#include<iostream>#include<cstdio>#include<math.h>usingnamespacestd;intmain(){......
  • [NOIP2001 提高组] 一元三次方程求解
    试题描述:输入一行,4个实数a,b,c,d输出一行,3个实根,从小到大输出,并精确到小数点后2位。样例输入1-5-420样例输出-2.002.005.00#include<bits/stdc+......
  • [NOIP2001 提高组] 一元三次方程求解
    [NOIP2001提高组]一元三次方程求解分析:由题意得,本题要求的是一元三次方程等于0时的三个根,由图像我们可知等于0时的根左右两侧的点的纵坐标乘积(也就是根)为负数,因为题目......
  • [NOIP2001 提高组] 一元三次方程求解
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ doublea,b,c,d,x1,x2,x3; scanf("%lf%lf%lf%lf",&a,&b,&c,&d); for(doublei=-100;i<=100;i+=0.001)//枚举每个......