题目大意:
让你求解方程:
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;
}