HDU 2009

时间:2022-06-26 22:03:20

求数列的和

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 74554 Accepted Submission(s): 45280

Problem Description

数列的定义如下:

数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。

Input

输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。

Output

对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。

Sample Input

81 4

2 2

Sample Output

94.73

3.41

AC代码:

#include <stdio.h>
#include <math.h>
int main (){
int m,n,i;
double sum,num;
double a[1008];
while (scanf("%d%d",&n,&m)!=EOF){
a[0]=n;
sum=n;
for (i=1;i<m;i++){
a[i]=sqrt(a[i-1]);
sum+=a[i];
}
printf("%.2lf\n",sum);
}
return 0;
}

用数组写的明显有点繁琐了,下面的代码更加简洁些:

另一个AC代码:

#include <stdio.h>
#include <math.h>
int main(){
double m,n,sum,i;
while(scanf("%lf%lf",&n,&m)!=EOF){
for(i=0,sum=0;i<m;i++){
sum+=n;
n=sqrt(n);}
printf("%.2lf\n",sum);
}
return 0;
}