宁波市城乡和建设网站宁波市高等级公路建设指挥部网站
宁波市城乡和建设网站,宁波市高等级公路建设指挥部网站,简单项目计划书模板,工程公司注册费用P1024 [NOIP2001 提高组] 一元三次方程求解 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题目分析注意事项 代码后话额外测试用例样例输入 #2样例输出 #2 王婆卖瓜 题目来源 前言
没有前言#xff0c;可能因为作者忘了编辑
题目
题目描述
有形如可能因为作者忘了编辑
题目
题目描述
有形如 a x 3 b x 2 c x d 0 a x^3 b x^2 c x d 0 ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数 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 x1x2 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题目分析 这题就算比较简单的一题也有很多方法有数学加成比较高的盛金法和牛顿迭代法等等我就用比较简单易懂的暴力二分来做。 当然有个前提是知道勘根定理当然题目也有给。就是记方程 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 x1x2 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) 之间一定有一个根。 能使用我这个方法也有一个前提就是题目所说的“两个根之间距离大于等于1” 。所以我们可以先间隔为1遍历每个长度为1的区间只需要200次就可以找到三个解的大致区间。 然后就剩下三个分别为1 的区间是解这是我们就可以用二分的方法利用勘根定理来做二分只要l和mid的符号相同相乘为正说明不在这个区间内我们就可以更换区间知道l逼近于r这时候就不需要考虑这个区间中有几个解。
注意事项
1.注意浮点数的处理建议里面都使用浮点数使用int可能会损失精度。 2.浮点数关于相等的判断。使用fabs(x)1e-6或者x1e-6x1e-6来判断x是否等于0使用l-r1e-6来判断lr 3.关于有解等于0的办法。我这里将符合的解都加上0.001这样就不会出现等于0导致误判的情况了。
代码
轻松拿下只有四个点。 #includeiostream
#includealgorithm
#includecmath
using namespace std;double a,b,c,d;
double f(double x){//函数值return a*x*x*xb*x*xc*xd;
}
int negative(double x){//返回正负性或0if(fabs(x)1e-6){return 0;}else if(x0){return -1; }elsereturn 1;
}
int main()
{cin abcd;double solution[100]{0};int point 0;double lastsolnegative(f(-100));for(int i-99;i100;i){if(f(i)*lastsol0||fabs(f(i))1e-6)solution[point]i0.001;lastsolnegative(f(i0.001));}for(int i 0;i3;i){double lsolution[i]-1,rsolution[i]1;while(r-l0.001){double mid (lr)/2;if(f(l)*f(mid)0)//说明l和mid在同侧则解在mid和r之间lmid;elsermid; }printf(%.2lf ,(lr)/2); }return 0;
}后话
额外测试用例
因为忘记考虑浮点数精度而获得了一个用例
样例输入 #2
1 -4.65 2.25 1.4样例输出 #2
-0.35 1.00 4.00王婆卖瓜
感觉有收获或者想跟上我的进度刷题的可以点个关注或者点赞收藏评论都可以
题目来源 NOIP 2001 提高组第一题 洛谷链接
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85485.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!