C语言应用实例:解方程(二分查找)

一、题目

给定方程 8∗x4+7∗x3+2∗x2+3∗x+6==y,请计算 x 在 [0,100] 范围内的解。

++要求:++ 输入数据首先是一个正整数 T (1<=T<=100),表示有 T 组测试数据。

接下来 T 行,每行包含一个实数 Y (∣Y∣<=1e10)。

请计算并输出方程在范围 [0,100] 内的解,结果精确到小数点后 4 位。

如果无解,则请输出"No solution!"。

二、题解

作为一个正常人,我们最先想到的一定是暴力求解

但需要注意的是,题目要求精确到四位小数

那么计算量便会直线飙升

此时我们便可以使用二分查找的方法

简单来说就是,取定义域中值mid,和y比大小,如果mid大则缩小定义域右边界为mid,反之则赋值左边界为mid

代码如下

cs 复制代码
 double left = 0, right = 100;
        double mid, result;+6
        
        // 二分精度控制到1e-8,确保结果精确到小数点后4位
        while (right - left > 1e-8) {
            mid = (left + right) / 2;
            result = f(mid);
            
            if (fabs(result - y) < 1e-8) {
                break;
            }
            
            if (result < y) {
                left = mid;
            } else {
                right = mid;
            }
        }

这就是本题的核心算法

三、完整代码

cs 复制代码
#include <stdio.h>
#include <math.h>

// 定义方程函数
double f(double x) {
    return 8*pow(x,4) + 7*pow(x,3) + 2*pow(x,2) + 3*x + 6;
}

int main() {
    int T;
    scanf("%d", &T);
    
    while (T--) {
        double y;
        scanf("%lf", &y);
        
        // 检查y是否在函数值范围内
        if (y < f(0) || y > f(100)) {
            printf("No solution!\n");
            continue;
        }
        
        // 二分法求解
        double left = 0, right = 100;
        double mid, result;+6
        
        // 二分精度控制到1e-8,确保结果精确到小数点后4位
        while (right - left > 1e-8) {
            mid = (left + right) / 2;
            result = f(mid);
            
            if (fabs(result - y) < 1e-8) {
                break;
            }
            
            if (result < y) {
                left = mid;
            } else {
                right = mid;
            }
        }
        
        // 输出结果,保留4位小数
        printf("%.4lf\n", mid);
    }
    
    return 0;
}
相关推荐
颜酱1 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者17 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮17 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者18 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考18 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx21 小时前
CART决策树基本原理
算法·机器学习
Wect21 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway1 天前
解析残差网络 (ResNet)
算法
拖拉斯旋风1 天前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法