首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ACM 題目解析:求數列的和(山東理工大學 1238)

     編輯:關於C語言

題目描述

數列定義:首項為 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 自動四捨五入至小數點後兩位。
  • 輸入以 EOF 結束,while(scanf(...)!=EOF) 即可。

數學補充

此數列為 a_1 = n, a_{k+1} = sqrt(a_k),即 a_k = n^{1/2^{k-1}}。當 k 趨大,項值趨近 1(若 n>0)。前 m 項和無簡單閉式,逐項疊加最直接。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved