题目大意:       让你求解方程:             x1=x-sqrt(y);             y1=y-sqrt(x);         已知x1,y1,要求x与y,精确到小数点后6位。 解题思路;           迭代法,感谢阿侠,一语惊醒。。           式子是这样推的:                    x=x1+sqrt(y);                    y=y1+sqrt(x);             然后一开始把y=y1,x=x1赋值上去迭代,因为x>x1,y>y1;所以这样迭代上去,值会累加。可是为什么累加后值不会超过真实的x与y呢。。。因为x=x1+sqrt(y1+sqrt(x1));这里面y1+sqrt(x)本来就是小于真实的y的。所以这里迭代上去只能使值越来越靠近真实值,而不会出现迭代上去后,值超过真实值的情况。。 代码:
#include
#include
#include
#include
using namespace std;
int main(void)
{
	int cas,cas_c=1;
	double x1,y1,x,y,sx,sy;
	cin>>cas;
	while(cas--)
	{
		cin>>x1>>y1;
		sx=x1;
		sy=y1;
		do
		{
			y=y1;
			x=x1;
			x1=sx+sqrt(y);
			y1=sy+sqrt(x);
		}while(x1-x>0.00000001 || y1-y>0.00000001);
		printf("Case %d: %.6lf %.6lf\n",cas_c,x1,y1);
		cas_c++;
	}
	getchar();
	return 0;
}
 
posted on 2011-11-17 20:46  cchun  阅读(182)  评论(0编辑  收藏  举报