码迷,mamicode.com
首页 > 其他好文 > 详细

基础2分。

时间:2014-12-16 17:09:54      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:acm算法   amp   c   math.h   printf   

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的值,叫你求出X的值。一道十分基础的2分题。
下面上代码附上详细解析:

#include <stdio.h>
double f(double x)
{
	return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;//列出题目的算式,下面的f(100)和f(0)、f(mid)都是这个的值。
}
void pp()
{
	double wbx,cc;//定义变量
	int n;
	double y;;// 定义变量
	double mid;//定义变量
	scanf("%d",&n);//输入N代表案例个数
	while(n--)
	{
		scanf("%lf",&y);//输入Y。
		wbx=100.0;
		cc=0.0;
		if(y>f(100) ||y<f(0))//题目要求:如果Y的值大于f(100)或者小于f(0)则继续。
		{
			printf("No solution!\n");//没有所求的X。
			continue;
		}
		while(wbx-cc>1e-8)// 2分开始了,1e-8代表10的负8次方。取得越小越好,这样值才足够的精确。当这两个值相差大于1e-8时,不断的循环下面的操作。
		{
			mid=(wbx+cc)/2.0;// 让mid等于两个和的一半。
			if(f(mid)>y)    //如果这f(mid)大于Y的话
			{
				wbx=mid-1e-8;//让大的那个减小。
			}
			
			else
			{
				cc=mid+1e-8;//否则让小的那个增加。
			}
		}
		printf("%.4lf\n",mid);// 跳出循环后f(mid)自然等于Y了(可精确到小数点后7、8位吧)。而mid就是我们所求的x。题目只要保留4位小数就好了。四位时所求的mid和x的值一定是相等的。

	}
}
int main()
{
	pp();//解决问题。
}



基础2分。

标签:acm算法   amp   c   math.h   printf   

原文地址:http://blog.csdn.net/sky_miange/article/details/41961783

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!