解题思路
这是一个数列求和的问题。需要计算从n开始,每次取平方根,求前m项的和。需要注意精度控制和浮点数计算。
关键点:
- 使用double类型保存结果
- 每次计算下一项时取平方根
- 需要控制输出精度为2位小数
- 处理多组测试数据
算法步骤:
- 读取每组测试数据的n和m
- 计算数列的每一项
- 累加求和
- 控制精度输出结果
代码
#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
算法及复杂度
- 算法:模拟
- 时间复杂度:,其中 为需要计算的项数
- 空间复杂度:,只需要常数空间存储中间结果