当前位置: 首页 > wzjs >正文

学校网站建设注意点优化大师是干什么的

学校网站建设注意点,优化大师是干什么的,石家庄h5网站建设,找手工活做注册网站2025 - 02 - 13 - 第 52 篇 作者(Author): 郑龙浩 / 仟濹(CSND) 【二分搜索】 P1024 一元三次方程求解 题目描述 有形如: a x 3 b x 2 c x d 0 a x^3 b x^2 c x d 0 ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数( a , b , c ,…

2025 - 02 - 13 - 第 52 篇
作者(Author): 郑龙浩 / 仟濹(CSND)
【二分搜索】

P1024 一元三次方程求解

题目描述

有形如: 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 提高组第一题

思路

首先要分析题目:
判断是否为 “根” 只有两种方法:

**前提:x 是以 1 个单位长度依次递增,而不是2 3 4什么的,就是一个单位长度 **

  • f( x ) == 0x 百分百为 “根”

  • left < right 且 f( left ) * f( right ) < 0,在 left 与 right 之间会有一个 x,这个 x 就是根

    为什么要确定 leftright 呢??

    因为 left 与 right 是两个整数,而这两个整数的距离实际上是1,比如 1与2,2与3,然后再确定具体的值1.23, 2.45(随便举例)等

    并且 f( left ) f( right ),一个为 正 一个为负数,中间可定有一个 f( x ) 为 0

    所以确定下来 left, right之后的任务就是:将 x 求出来,如何求???

    使用二分算法

    • 范围为 left ~ right

    • 不断 left ~ right / 2 ,直到满足 left < right right - left <= 0.001

      right - left <= 0.001 意思就是: 确定下来这两个数之间的差为三个小数,这样就能将 将结果变为 left 了

      Eg: 最后一层循环:

      left = 1.234
      right = 1.235
      ans = 1.234;
      // 四舍五入: 1.23
      

      当二分法的区间长度缩小到0.001时,取中间值作为近似解,四舍五入到两位小数时误差不会超过0.005。例如,假设真实解在某个区间[left, right],其中right - left = 0.001。此时中间值mid的误差最大是0.0005,这样在保留两位小数时,结果会是正确的。例如,若真实解是1.2345,而mid是1.234或1.235,四舍五入到两位小数后都是1.23或1.24,但需要确保在两位小数时的正确性。或者,可能作者认为当区间足够小时,可以直接输出区间端点中的某个值,作为近似解。

代码流程

  1. 输入系数a, b, c, d
  2. 遍历i-100到100,每次检查区间[i, i+1]是否存在根。
  3. 对于每个i,先检查f(i)是否为0,如果是就直接输出。
  4. 如果f(i)*f(i+1) < 0,说明该区间有一个根,调用二分法查找。
  5. 二分法在区间内不断缩小区间,直到区间长度小于0.001,然后返回左端点作为近似解。
  6. 所有找到的根按顺序输出。

代码

// 洛谷P1024一元三次方程求解
// 2025-02-12
// 郑龙浩 / 仟濹
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
double a, b, c, d;
// 查找 left 与 right 之间的 x
double binary_search_self( double left, double right );
// 计算带入方程结果
double fun( double x );
int main( void ){cin >> a >> b >> c >> d;for( int i = -100; i <= 99; i ++ ){// if fun( i ) 的值 == 0.,就代表 i 就是根// 因为 i 是从小到大判断的,无需sortif ( fun( i ) == 0 ){// 记住: i 要转换成 double 类型,不然 直接 直接用 %f 打印 int ,结果是0// 因为我找了半天错,没找出来,就是这里写错了,要强制类型转换(小细节)printf( "%.2f ", (double)i );}if ( fun( i ) * fun( i + 1 ) < 0 ){ // 确定下来这个根在 i 与 i + 1 间double ans = binary_search_self( i, i + 1 );printf( "%.2f ", ans );}}return 0;
}
// 查找 left 与 right 之间的 x
double binary_search_self( double left, double right ){double middle;while( right - left > 0.001 ){middle = ( left + right ) / 2.0;if( fun( left ) * fun( middle ) < 0 ) right = middle;//说明根在left~mid中 else left = middle;//说明根在mid~right中 }return ( left + right ) / 2;// 精度更高,可以不left - AI 给我提的意见// 第一次写的做法// return left; // 输入left 千万不要right 比如: 1.234,1.235,输出第二个四舍五入的1.24
}
// 计算带入方程结果
double fun( double x ){double ans = a * pow(x, 3) + b * pow(x, 2) + c * x + d;return ans;
}
http://www.dtcms.com/wzjs/191807.html

相关文章:

  • 中国那个公司的网站做的最好百度快速排名用是
  • 济南科技市场做网站seo的公司排名
  • 企业网页制作公司青岛网站seo规划
  • 拼多多货源一件代发平台seo三人行网站
  • 响应式网站建设福州优化排名
  • 网站营售郑州网站建设推广优化
  • 留学网站模板关键词如何优化排名
  • 网页界面设计常用分辨率是多少dpi安康seo
  • 响应式网站编码怎吗设置seo做的好的网站
  • 2018年做网站赚钱整站seo排名
  • 杭州网站建设模板网络推广网络营销软件
  • 小公司网站建设赣州seo公司
  • 收到一张网站服务费怎么做凭证网站排名搜索
  • 南昌自助建站模板百度一下你就知道了百度一下
  • 房山武汉阳网站建设网络营销和传统营销的关系
  • 国内哪些公司做商城型网站靠谱吗网站搜索排名
  • 有字体设计网站钟南山今天感染新冠了
  • 嘉兴做营销型网站app优化网站
  • 网站的超级链接怎么做数据分析培训机构哪家好
  • 珠海市住房和城乡建设厅网站搜索引擎竞价排名
  • 做暖暖的视频网站如何让百度收录自己的网站
  • 青岛公司做网站百度热搜的含义
  • 免费行情网站链接百度资源搜索资源平台
  • 洛阳网站建设哪家权威seo收录查询工具
  • 沈阳个人做网站互联网营销师报名入口官网
  • 网站模板批量下载优化营商环境发言稿
  • 百度做的网站字体侵权网站seo运营培训机构
  • 网站不备案可以做百度推广吗app开发需要哪些技术
  • 高端网站案例欣赏潍坊网站开发公司
  • 网站设计制作费用注册网站平台要多少钱