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): 5667    Accepted Submission(s): 2681


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!

题意:输入y。。找出0-100中 满足题目中那个公式的x

思路:2分法。从0-100开始不断缩小区间直到满足条件为止

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
int t;
double y;
double x1;
double x2;
double sb(double x)
{
    return 8 * x * x * x * x + 7 * x * x * x + 2 * x * x + 3 * x + 6;
}
int main()
{
    scanf("%d", &t);
    while (t --)
    {
	x1 = 0; x2 = 100;
	scanf("%lf", &y);
	while (1)
	{
	    if (fabs(sb(x1) - y) < 1e-4)
	    {
		printf("%.4lf\n", x1);
		break;
	    }
	    else if (fabs(sb(x2) - y) < 1e-4)
	    {
		printf("%.4lf\n", x2);
		break;
	    }
	    else if (sb(x2) < y || sb(x1) > y)
	    {
		printf("No solution!\n");
		break;
	    }
	    else if (sb((x1 + x2)/2) < y)
		x1 = (x1 + x2) / 2;
	    else if (sb((x1 + x2)/2) > y)
		x2 = (x1 + x2) / 2;
	}
    }
    return 0;
}


你可能感兴趣的:(HDU 2199 Can you solve this equation?)