百练 迭代法解方程 2697

2697:迭代法解方程

  • 查看
  • 提交
  • 统计
  • 提示
  • 提问
总时间限制:
2000ms
内存限制:
65536kB
描述
对函数y = f(x) = x*x*x + x + a(其中a大于0)。要直接求y=0时x的取值并不容易,但因为y是单调递增的函数,我们可以利用这个性质求x的近似值。取x1=-a,显然f(-a)小于0,取x2=0,显然f(a)大于0。我们规定近似误差不超过b(比如b=0.001)。这时我们取x=(x2-x1)/2,再判断(x2-x1)是否小于b,如果小于b,x就是我们要求的值,否则我们需要判断f(x)的取值,如果f(x)大于0,令x2=x,重新求解;如果f(x)小于0,令x1=x,也重新求解;如果f(x)恰好等于0,则以此x应作为最终x的取值。我们把这种求解的过程称为迭代法。
输入
第一行为数据数量n。其余个行每行包含两个浮点数a和b。
输出
输出为n行,每行输出对应的x和y的值。
样例输入
3
23 0.01
23 0.001
23 0.0001
样例输出
-2.726196 0.012314
-2.726547 0.004137
-2.726767 -0.000974
 
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n,i;
	double x,b,a;
	scanf("%d",&n);
	for(i=0; i<n; i++)
	{
		scanf("%lf %lf",&a,&b);
		if(a>0){
		
			x = (-a-0)/2;
		}
		
		if(x<0){
			while(x<0){
				x=(a-0)/2;
			}	
		}
		if(x>0){
			while(x>0){
				x=(-x);
			}
		}
		if(x==0 || x<b){
			printf("%lf %lf\n",x,x*x*x+x+a);
		}
		
	}
	
	return 0;
}

你可能感兴趣的:(百练 迭代法解方程 2697)