且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

hdu 2199 Can you solve this equation?

更新时间:2022-08-19 22:44:01

点击打开hdu2199

思路: 二分
分析:
1 求题目给定的等式是否有[0,100]之间的解
2 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6是一个单调递增的函数,那么求解的话我们利用二分的思想
3 注意判断没有解的情况就是Y < 0 或者 Y大于x为100的时候等式的值

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const double eps = 1e-10;

double Pow(double x , int y){
    double sum = 1;
    for(int i = 0 ; i < y ; i++)
        sum *= x;
    return sum;
}

void solve(double n){
    double left = 0.0;
    double right = 100.0;
    double mid;
    double sum = 8*Pow(100,4)+7*Pow(100,3)+2*Pow(100,2)+300;
    n -= 6;
    if(n < 0 || n > sum){
        puts("No solution!");
        return;
    }
    while(right-left > eps){
         mid = (left+right)/2.0; 
         sum = 8*Pow(mid,4)+7*Pow(mid,3)+2*Pow(mid,2)+
             3*mid;
         if(sum - n > eps){
             right = mid;  
         } 
         else{
             left = mid; 
         }
    }
    printf("%0.4lf\n" , left);
}

int main(){
    int cas;
    double n;
    scanf("%d" , &cas);
    while(cas--){
         scanf("%lf" , &n); 
         solve(n);
    }
    return 0;
}