HNUST专题练习:二分法

该博客介绍了如何使用二分法解决杭电HNUST专题练习中的一个问题,通过求解函数的一阶导和二阶导判断单调性,从而应用二分查找算法找到解。
摘要由CSDN通过智能技术生成

题目:Can you solve this equation?
连接:杭电HNUST专题联练习 1000
思路:对所给函数直接求一阶导和二阶导可知,函数在0~100是单调递增。所以可直接用二分法求解


#include <stdio.h>
#include <math.h>

int main()
{
    int T;
    double x1, x2, n, mid,ans1,ans2, ans;
    scanf("%d", &T);
    while(T--)
    {
        x1 = 0;
        x2 = 100;
        scanf("%lf", &n);
        ans1 = 8 * pow(x1, 4) + 7 * pow(x1, 3) + 2 * pow(x1, 2) + 3 * x1 + 6 - n;
        ans2 = 8 * pow(x2, 4) + 7 * pow(x2, 3) + 2 * pow(x2, 2) + 3 * x2 + 6 - n;
        if (ans1 > 0 || ans2 < 0)  //如果ans1大于零或者ans2小于零,证明无解
            printf("No solution!\n");
        else
        {
            while (fabs(x1 - x2) >= 1e-8)  //限定范围,使得值更精确
            {
                mid= (x1 + x2) / 2;
                ans = 8 * pow(mid, 4) + 7 * pow(mid, 3) + 2 * pow(mid, 2) + 3 * mid + 6 - n;
                if (ans >= 0)
                    x2 = mid;
                else
                    x1 = mid;
            }
            printf("%0.4f\n", mid);
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值