杭电2199.Can you solve this equation?

Problem Description

Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;
Now please try your
lucky.

Input

The first line of the input contains an integer
T(1<=T<=100) which means the number of test cases. Then T lines follow,
each line has a real number Y (fabs(Y) <= 1e10);

Output

For each test case, you should just output one real
number(accurate up to 4 decimal places),which is the solution of the equation,or
“No solution!”,if there is no solution for the equation between 0 and 100.

Sample Input

2
100
-4

Sample Output

1.6152

No solution!

本题涉及二分法

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

double ans(double a)//计算(8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6)
{
    return (8*a*a*a*a+7*a*a*a+2*a*a+3*a+6.0);
}
double ans(double);//函数的声明
int main()
{
    double l,r,y,mid;
    int n,flag;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lf",&y);

//l为左端,r为右端;
        l=0;
        flag=0;
        r=100;

//以下为二分法的精髓
        while(l<r)
        {
            mid=(l+r)/2.0;
            if(fabs(ans(mid)-y)<=1e-6)
            {
                printf("%.4lf\n",mid);
                flag=1;
                break;
            }
            else if(ans(mid)-y>1e-6)
            {
                r=mid;
            }
            else if(y-ans(mid)>1e-6)
            {
                l=mid;
            }

}

if(!flag)
        printf("No solution!\n");
    }
    return 0;    
}

时间: 2024-10-05 15:49:03

杭电2199.Can you solve this equation?的相关文章

hdu 2199 Can you solve this equation?(高精度二分)

http://acm.hdu.edu.cn/howproblem.php?pid=2199 Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13468    Accepted Submission(s): 6006 Problem Description Now,given the

hdu 2199 Can you solve this equation?

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2199 题目大意:找到满足8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y的x值,注意精确度问题. 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 7 8 double fun(double s) 9 { 10 return

hdu 2199:Can you solve this equation?(二分搜索)

Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7493    Accepted Submission(s): 3484 Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,

HDU 2199 Can you solve this equation?(二分精度)

HDU 2199 Can you solve this equation? Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100; Now please try your lucky. InputThe first line of the input contains an integer T(1<=T<=100) which means t

杭电 HDU ACM 2199 Can you solve this equation?

Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11180    Accepted Submission(s): 5151 Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 ==

HDU 2199 Can you solve this equation?【二分查找】

解题思路:给出一个方程 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,求方程的解. 首先判断方程是否有解,因为该函数在实数范围内是连续的,所以只需使y的值满足f(0)<=y<=f(100),就一定能找到该方程的解,否则就无解. 然后是求解过程, 假设一个区间[a,b],mid=(a+b)/2,如果f(a)*f(b)<0,那么函数f(x)在区间[a,b]至少存在一个零点,如果f(a)<0,说明0点在其右侧,那么将a的值更新为当前mid的值,如果f(a)&g

ACM:HDU 2199 Can you solve this equation? 解题报告 -二分、三分

Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16281 Accepted Submission(s): 7206 Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can

Num 23 : HDOJ : 2199 Can you solve this equation? + HDOJ : 1969 Pie [ 二分法 ]

在处理计算数学上某函数零点的时候,我们通常是这样做的: 1. 先判断这个零点在某个单调区间 [ a,b ]上( 假设为递增区间 ): 2. 之后判断 f(x) 在 (a+b)/2 [ a,b中点处 ]是否为零: 3. 若中点处大于零,b=( a+b )/2 ;否则,同理,a=( a+b )/2 ; 4. 重复2.3.过程,直到找到零点,或满足精度: 如图( 图片来自百度 ): C语言基于这个原理,也有了自己的二分法: 二分法:     在某一特定的序列之中[ 通常是已经排过序的数列 ]寻找某一特

hdoj 2199 Can you solve this equation?【浮点型数据二分】

Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12766    Accepted Submission(s): 5696 Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y