解方程(二分法) HDU
Problem Description
给定方程 8x4+ 7x3+ 2x2 + 3x + 6 == Y,请计算x在[0,100]范围内的解。
Input
输入数据首先是一个正整数T(1<=T<=100),表示有T组测试数据。
接下来T行,每行包含一个实数Y ( fabs(Y) <= 1e10 )。
Output
请计算并输出方程在范围[0,100]内的解,结果精确到小数点后4位。
如果无解,则请输出“No solution!”
Sample Input
2
100
-4
Sample Output
1.6152
No solution!
首先这个题,我们先想用什么方法,我们可以使用枚举,而枚举效率过低,我们发现这个函数在[0,100]之间是单调递增的,因此数列有序,我们可以使用二分法去查找最合适的答案,并且把误差控制在1e-4之内。注意这个No solution!情况的判别,我在这居然卡了好久。因为我以为fn(0)就是0,结果半天才检查出来。
因为我们要保留小数点到后四位,所以在循环中我们要控制精度最好在小数点后6~7位。注意输入的数据y是个实数,不是整数。
#include<bits/stdc++.h>
using namespace std;
double fn(double x)
{return 8*pow(x,4.0)+7*pow(x,3.0)+2*pow(x,2.0)+3*x+6;
}
int main()
{int t;cin>>t;while(t--){double y;cin>>y;double mid;if(y>=fn(0)&&fn(100)>=y){double left=0;double right=100;while(right-left>1e-8){mid=(left+right)/2;if(fn(mid)>y)right=mid-1e-9;else if(fn(mid)<y)left=mid+1e-9;elsebreak;}printf("%.4lf\n",(left+right)/2);}elsecout<<"No solution!\n";}return 0;
}
更新一下~~~~
还有一种判断方法
判断
abs(8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6-y)>=1e-5
时循环停止。注意一定要加绝对值。
#include<bits/stdc++.h>
using namespace std;
int main()
{int t;double low,high,mid,y;cin>>t;while(t--){cin>>y;mid=100;if(8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6<y||y<6){cout<<"No solution!"<<endl;continue;}low=0;high=100;mid=(low+high)/2;while(abs(8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6-y)>=1e-5){if(8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6>y){high=mid-1e-10;}else if(8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6<y){low=mid+1e-10;}else break;mid=(low+high)/2;}printf("%.4lf\n",mid);}return 0;
}
解方程(二分法) HDU相关推荐
- 解题思考F. 解方程(二分法解方程)
题目描述 Problem Description 给定方程 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,请计算x在[0,100]范围内的解. Input 输入数据首先是一个正整数 ...
- 最优化学习---从解方程到最优化1
来源于 上交视频,https://www.bilibili.com/video/av14666879/ 第一章,introduction Formulation f(x): Cost function ...
- 解方程 ( 迭代法/牛顿迭代/高斯消元 ) 详解及模板
欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- 一.迭代法解方程 ( ...
- C语言 牛顿法 解方程,牛顿法解方程
数值法解方程广泛应用于各种工程科学领域,它可以求出解的近似值,而对于高次方程没有求根公式,而且对于各种困难的方程,数值法就显得尤为重要. 我们的老师向我们介绍了"二分法",这种方法 ...
- python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程
前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 (一)求解多元一次方程-solve() 1.说明: 解多元一次方程可以使用solve( ...
- java2的7次方怎么表示_python编程解方程第二弹:10行代码解二次方程(纯字符)...
用纯字符串格式来记录二次方程: '3x^2-10x-8=0' 'x^2-2x+1=0' '3x^2+14x+8=0' 'x^2=9' 二次方怎么表示呢?比如上面的^表示法,或者是python风格的** ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4856 Solved: 983 [Submit][Stat ...
- 10.24T3 解方程 取模意义下运算+秦九韶算法
#1228 解方程 描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入 输入共n + 2 行. 第一行包含2 ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
最新文章
- var java_var 是 Java 开发的好朋友啊!
- MyBatis入门学习教程-调用存储过程
- elemet UI 中表格数据的排序操作
- php临时目录没有文件夹里,PHP上传 找不到临时文件夹的解决方法
- 编码实战Web端联系人的增删改查
- arrays中copyof复制两个数组_数据结构与算法(3)数组
- vivo S10系列官方渲染图公布 外壳太好看了!
- [leetcode]693. 交替位二进制数
- SGuard64.exe(SGuardwnd) ACE-Guard Client EXE:造成磁盘经常读写,游戏卡顿,及解决方案
- Pr视频剪辑基础技巧学习
- mate7tl10是Android,华为Mate 7 MT7-TL10官方线刷包安卓5.1.1Rom刷机包
- Excel办公中的应用(中秋快乐学习)(注意:全部为英文符号)
- 基于不同策略的英文单词的词频统计和检索系统(C++)
- (day16)媒体查询和响应式布局
- TortoiseGit commands(命令)(完整中文翻译)
- CMGCN 2022ACL
- 读《迟到的间隔年》有感
- 算法模型好坏、评价标准、算法系统设计
- 关于Mac App Store无法下载、无法安装、一直转圈的解决方法
- 基于Java+Vue+uniapp微信小程序实现餐厅校园订餐平台