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;
}
相关推荐
FL16238631296 分钟前
C# OpenCvSharp 基于霍夫变换直线检测的文本图像倾斜校正文本图像倾斜校
开发语言·c#
春日见10 分钟前
决策规划控制面经汇总
人工智能·深度学习·算法·机器学习·自动驾驶
Full Stack Developme11 分钟前
Java DFA算法
java·python·算法
techdashen20 分钟前
在 Fly.io 上使用 Rust 构建远程开发环境:从 Tokio 到 eBPF
开发语言·后端·rust
fie888921 分钟前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab
小陈phd21 分钟前
Text2SQL智能体学习笔记(一)——NL2SQL及执行流程介绍
笔记·学习
风栖柳白杨22 分钟前
【大模型学习】主流大模型统计
学习
海天鹰23 分钟前
图片去黑边算法
qt·算法
lengxuemo24 分钟前
ICC2学习之PG
学习
留白_24 分钟前
pandas文件读取与存储
开发语言·python·pandas