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,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<string.h>
double f(double v)//用来计算方程结果(即y的值)
{
	return 8*v*v*v*v+7*v*v*v+2*v*v+3*v+6;
}
int main()
{
	int t;
	double y,l,r,mid;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lf",&y);
		if(y<f(0)||y>f(100))
		{
			printf("No solution!\n");
			continue;
		}
		l=0;r=100;mid=0;
		while((r-l) > 1e-10)//题目要求精度为小数点后四位,最好把精度调高
		{
			mid=(l+r)/2;//每次折半取x的范围
			if(f(mid) < y)
			    l=mid;
			else
			    r=mid;
		}
		printf("%.4lf\n",mid);
	}
}

  

时间: 2024-10-10 09:44:41

hdoj 2199 Can you solve this equation?【浮点型数据二分】的相关文章

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语言基于这个原理,也有了自己的二分法: 二分法:     在某一特定的序列之中[ 通常是已经排过序的数列 ]寻找某一特

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

hdoj 2199 Can you solve this equation? 【二分枚举】

题意:给出一个数让你求出等于这个数的x 策略:如题.因为整个式子是单调递增的,所以可以用二分. 要注意到精度. 代码: #include <stdio.h> #include <string.h> #include <math.h> #define eps 1e-10 #define f(x) 8*pow(x, 4) + 7*pow(x, 3) + 2*pow(x, 2) + 3*x int main() { int t; double n; scanf("%

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 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

杭电 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 ==