解题思路

这是一个数列求和的问题。需要计算从n开始,每次取平方根,求前m项的和。需要注意精度控制和浮点数计算。

关键点:

  1. 使用double类型保存结果
  2. 每次计算下一项时取平方根
  3. 需要控制输出精度为2位小数
  4. 处理多组测试数据

算法步骤:

  1. 读取每组测试数据的n和m
  2. 计算数列的每一项
  3. 累加求和
  4. 控制精度输出结果

代码

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    double solve(int n, int m) {
        double sum = 0;
        double current = n;
        
        // 计算前m项的和
        for (int i = 0; i < m; i++) {
            sum += current;
            current = sqrt(current);
        }
        
        return sum;
    }
};

int main() {
    int n, m;
    Solution solution;
    
    while (cin >> n >> m) {
        printf("%.2f\n", solution.solve(n, m));
    }
    
    return 0;
}
import java.util.*;

public class Main {
    static class Solution {
        public double solve(int n, int m) {
            double sum = 0;
            double current = n;
            
            // 计算前m项的和
            for (int i = 0; i < m; i++) {
                sum += current;
                current = Math.sqrt(current);
            }
            
            return sum;
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Solution solution = new Solution();
        
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            System.out.printf("%.2f%n", solution.solve(n, m));
        }
        
        sc.close();
    }
}
class Solution:
    def solve(self, n: int, m: int) -> float:
        sum = 0
        current = n
        
        # 计算前m项的和
        for i in range(m):
            sum += current
            current = current ** 0.5
        
        return sum

# 读取输入
while True:
    try:
        n, m = map(int, input().split())
        solution = Solution()
        print("{:.2f}".format(solution.solve(n, m)))
    except EOFError:
        break

算法及复杂度

  • 算法:模拟
  • 时间复杂度:,其中 为需要计算的项数
  • 空间复杂度:,只需要常数空间存储中间结果