【杭电】[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!
");
            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
",res);
    }
    return 0;
}

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

原文地址:https://www.cnblogs.com/BoilTask/p/12569482.html