【杭电】[2199]Can you solve this equation?

这里写图片描述
这里写图片描述

二分搜索答案
与Y进行比较可知道mid与res的大小关系

注意x的取值为0~100
因为函数f(m)=8*m4+7*m3+2*m2+3*m+6
在0~100上单调递增
所以如果Y<f(0)||Y>f(100)是没有结果的

#include<stdio.h>
double n;
double f(double m) {
    return 8*m*m*m*m+7*m*m*m+2*m*m+3*m+6;
}
bool judge(double m) {
    if(f(m)>n)
        return true;
    else
        return false;
}
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%lf",&n);
        if(n<f(0.0)||n>f(100.0)) {
            printf("No solution!\n");
            continue;
        }
        double r=10000000000,l=0,res;
        while(r-l>1e-6) {
            double mid=(r+l)/2;
            if(judge(mid)) {
                res=mid;
                r=mid;
            } else
                l=mid;
        }
        printf("%.4lf\n",res);
    }
    return 0;
}

题目地址:【杭电】[2199]Can you solve this equation?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值