數列定義:首項為 n,後續各項為前一項的平方根。求前 m 項之和,精度保留小數點後兩位。n<10000, m<1000,多組測資直到 EOF。
輸入: 81 4 2 2 輸出: 94.73 3.41
說明:
81, 9, 3, 1.732... → 和 ≈ 94.73
2, 1.414... → 和 ≈ 3.41
直接模擬:sum = n; term = n; for i=1 to m-1: term = sqrt(term); sum += term;。m<1000 迴圈極小,無效能問題。
#include <stdio.h>
#include <math.h>
int main() {
int n, m;
while (scanf("%d %d", &n, &m) != EOF) {
double sum = n, term = n;
for (int i = 1; i < m; ++i) {
term = sqrt(term);
sum += term;
}
printf("%.2f\\n", sum);
}
return 0;
}
double 保證精度,sqrt 需 <math.h>,編譯時連結數學庫(-lm)。%.2f 自動四捨五入至小數點後兩位。while(scanf(...)!=EOF) 即可。此數列為 a_1 = n, a_{k+1} = sqrt(a_k),即 a_k = n^{1/2^{k-1}}。當 k 趨大,項值趨近 1(若 n>0)。前 m 項和無簡單閉式,逐項疊加最直接。