题目描述

有形如:a x^3 + b x^2 + c x + 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 -5 -4 20

输出

  1. -2.00 2.00 5.00

分析

二分或牛顿迭代之

代码

  1. #include <bits/stdc++.h>
  2.  
  3. #define Enter puts("")
  4. #define Space putchar(' ')
  5.  
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. typedef unsigned long long Ull;
  10. typedef double Db;
  11.  
  12. inline ll Read()
  13. {
  14. ll Ans = 0;
  15. char Ch = ' ' , Las;
  16. while(!isdigit(Ch))
  17. {
  18. Las = Ch;
  19. Ch = getchar();
  20. }
  21. while(isdigit(Ch))
  22. {
  23. Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
  24. Ch = getchar();
  25. }
  26. if(Las == '-')
  27. Ans = -Ans;
  28. return Ans;
  29. }
  30.  
  31. inline void Write(ll x)
  32. {
  33. if(x < 0)
  34. {
  35. x = -x;
  36. putchar('-');
  37. }
  38. if(x >= 10)
  39. Write(x / 10);
  40. putchar(x % 10 + '0');
  41. }
  42.  
  43. inline ll Quick_Power(ll a , ll b)
  44. {
  45. ll Ans = 1 , Base = a;
  46. while(b != 0)
  47. {
  48. if(b & 1 != 0)
  49. Ans *= Base;
  50. Base *= Base;
  51. b >>= 1;
  52. }
  53. return Ans;
  54. }
  55.  
  56. Db x1 , x2 , x3 , a , b , c , d;
  57. inline Db f(Db x)
  58. {
  59. return a * x * x * x + b * x * x + c * x + d;
  60. }
  61. inline Db df(Db x)
  62. {
  63. return 3 * a * x * x + 2 * b * x + c;
  64. }
  65. inline Db slove(Db l,Db r)
  66. {
  67. Db x , x0 = (l + r) / 2;
  68. while(abs(x0 - x) > 0.0001)
  69. x = x0 - f(x0) / df(x0) , swap(x0 , x);
  70. return x;
  71. }
  72. int main()
  73. {
  74. cin >> a >> b >> c >> d;
  75. Db p = (-b - sqrt(b * b - 3 * a * c)) / (3 * a);
  76. Db q = (-b + sqrt(b * b - 3 * a * c)) / (3 * a);
  77. x1 = slove(-100 , p);
  78. x2 = slove(p , q);
  79. x3 = slove(q , 100);
  80. printf("%.2lf %.2lf %.2lf" , x1 , x2 , x3);
  81. return 0;
  82. }

P1024 [NOIP2001 提高组] 一元三次方程求解的更多相关文章

  1. [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)

    [NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...

  2. 洛谷——P1024 一元三次方程求解

    P1024 一元三次方程求解 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-10 ...

  3. P1024 一元三次方程求解

    P1024 一元三次方程求解 #include<cstdio> #include<iostream> #include<algorithm> using names ...

  4. 洛谷P1024 一元三次方程求解

    P1024 一元三次方程求解 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-10 ...

  5. NOIP2001 一元三次方程求解

    题一  一元三次方程求解(20分) 问题描述 有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范 ...

  6. Codevs 1038 一元三次方程求解 NOIP 2001(导数 牛顿迭代)

    1038 一元三次方程求解 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 有形如:ax3+b ...

  7. Vijos P1116 一元三次方程求解【多解,暴力,二分】

    一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...

  8. 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)

    题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...

  9. [NOIP2001] 提高组 洛谷P1024 一元三次方程求解

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

随机推荐

  1. W32Dasm缓冲区溢出分析【转载】

    课程简介 在上次课程中与大家一起学习了编写通用的Shellcode,也提到会用一个实例来展示Shellcode的溢出. 那么本次课程中为大家准备了W32Dasm这款软件,并且是存在漏洞的版本.利用它的 ...

  2. Flask 实现分页

    pager.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. [CTF]盲文对照表

    [CTF]盲文对照表 摘自:https://wenku.baidu.com/view/28b04fd380eb6294dd886ca7.html 学点盲文 盲文又称点字,国际通用的点字由6个凸起的圆点 ...

  4. Access denied for user '电脑用户名'@'localhost'

    之前没有碰到这个问题,但是这次从gitee上面拉取代码运行,发现存在bug 错误描述 java.sql.SQLException: Access denied for user '10134'@'lo ...

  5. Problem: package docker-ce-3:18.09.9-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed

    安装Docker时报错 Problem: package docker-ce-3:18.09.9-3.el7.x86_64 requires containerd.io >= 1.2.2-3, ...

  6. Arduino+DS18b20+OLED Display

    DS18b20获取到温度数值保存到变量中,然后和天气图标还有滚动字幕一起发送到OLED 屏幕上显示 需要用到的库均可在Arduino库管理器下载. 电路图: 图中屏幕接线已在代码中写出,温度传感器da ...

  7. C++ primer plus读书笔记——第1章 预备知识

    第1章 预备知识 1. Ritchie希望有一种语言能将低级语言的效率.硬件访问能力和高级语言的通用性.可移植性融合在一起,于是他在旧语言的基础上开发了C语言. 2. 在C++获得一定程度的成功后,S ...

  8. Jenkins 基础篇 - 任务分类

    从前面的小节中我们看到在创建 Jenkins 任务的时候有好几种类型,如果你专门安装了 Maven 相关插件,可能还会有一个[构建一个 maven 项目]的任务类型,那这些任务类型究竟有何区别,以及我 ...

  9. MySQL之数据定义语言(DDL)

    写在前面 本文中 [ 内容 ] 代表啊可选项,即可写可不写. SQL语言的基本功能介绍 SQL是一种结构化查询语言,主要有如下几个功能: 数据定义语言(DDL):全称Data Definition L ...

  10. [DB] Flink 读 MySQL

    思路 在 Flink 中创建一张表有两种方法: 从一个文件中导入表结构(Structure)(常用于批计算)(静态) 从 DataStream 或者 DataSet 转换成 Table (动态) pa ...