九度oj-题目1166:迭代求立方根-数学

题目1166:迭代求立方根

时间限制:1 秒内存限制:32 兆特殊判题:否提交:5037解决:2313

题目描述:

立方根的逼近迭代方程是 y(n+1) = y(n)*2/3 + x/(3*y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值。

输入:

输入有多组数据。
每组一行,输入x n。

输出:

迭代n次后的立方根,double精度,保留小数点后面六位。

样例输入:

3000000 28

样例输出:

144.224957

来源:

2009年北京航空航天大学计算机研究生机试真题

思路:

简单的迭代。从没想过北航竟然会有这么简单的题目。不过为啥不把输入的数据类型和范围交代清楚。

AC代码:

#include
#define long long ll
using namespace std;
int x,N;
double fun(double y0,int n){
    double ans = y0;
    if(n < N){
        ans = 1.0*y0*2/3+ 1.0*x/(3*y0*y0);
        fun(ans,n+1);
    }else{
        return ans;
    }
     
}
int main(){
     
 
 
    double ans = 0;
    while(~scanf("%d %d",&x,&N)){
        if(N == 0) {
            printf("%.6lf\n",(double)x);
        }else{
            printf("%.6lf\n",fun(x,0));
        }
    }
    return 0;
}
 
/**************************************************************
    Problem: 1166
    User: phenix_Alice
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1520 kb
****************************************************************/

你可能感兴趣的:(研究生机试,北航机试)