在函数值异号且根唯一的区间上二分,逐步缩小零点范围。
OJ: noi_openjudge
题目 ID: ch0111-02
难度:入门
标签:二分数学python
日期: 2026-07-30 23:01
题意
已知五次函数在区间
思路
区间端点函数值异号,且根唯一。每次取中点,根据中点函数值的符号保留仍包含零点的一半区间。固定迭代 100 次后误差远小于输出精度。
代码
Python代码
python
def function(x: float) -> float:
return x**5 - 15 * x**4 + 85 * x**3 - 225 * x**2 + 274 * x - 121
left, right = 1.5, 2.4
for _ in range(100):
middle = (left + right) / 2
if function(middle) > 0:
left = middle
else:
right = middle
print(f"{(left + right) / 2:.6f}")C++代码
cpp
/* author: Rainboy email: rainboylvx@qq.com time: 2021年 04月 07日 星期三 12:53:57 CST */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5,maxe = 1e6+5; //点与边的数量
int n,m;
/* 定义全局变量 */
double f(double x){
return pow(x,5) - 15*pow(x,4) + 85*pow(x,3) - 225*pow(x,2) + 274*x -121;
}
double bs(double l,double r){
double pc = 0.00000001;
while (r-l > pc) {
double m = (l+r) / 2;
if( f(m) > 0 )
l = m;
else
r = m;
}
return l;
}
int main(){
double ans = bs(1.4,2.5);
printf("%0.6lf",ans);
return 0;
}复杂度
固定进行 100 次二分,时间复杂度为
总结
连续函数的唯一零点可用端点异号性质定位,二分时无需显式求解方程。