题解
疯狂坠落的小球
1 条题解
-
0
P4261 疯狂坠落的小球(入门)
解题思路
小球第一秒下落 a 米,以后每一秒都比前一秒多下落 9.8 米,4 秒落地。把 4 秒的下落距离排出来:
- 第 1 秒:a
- 第 2 秒:a + 9.8
- 第 3 秒:a + 19.6
- 第 4 秒:a + 29.4
把它们全部加起来: 总距离 = a + (a+9.8) + (a+19.6) + (a+29.4) = 4a + (9.8 + 19.6 + 29.4) = 4a + 58.8
也可以写成 4a + 9.8×(0+1+2+3) = 4a + 9.8×6。这里 6 是 0+1+2+3 的和,代表"多出来的那部分"总共累加了 6 个 9.8,这个数要算对。
边界情况:
- a 是小数,范围 4~5,要用 double 存,不能只用 int。
- 结果可能不是整数,要保留 1 位小数输出,用 fixed << setprecision(1)。
- 比如样例 a=4.9:总距离 = 4×4.9 + 58.8 = 19.6 + 58.8 = 78.4,输出 "78.4",和样例一致。
参考代码
// 用途:小球每秒多下落9.8米,输入第一秒距离a,求4秒共下落多少米 #include <iostream> #include <iomanip> using namespace std; int main() { double a; cin >> a; // 4秒分别下落 a、a+9.8、a+19.6、a+29.4,总和 = 4a + 9.8*6 = 4a + 58.8 double s = 4 * a + 9.8 * 6; cout << fixed << setprecision(1) << s << endl; // 保留1位小数 return 0; }复杂度分析
只做了一次乘法和一次加法,然后把结果保留 1 位小数输出,和 a 取多大无关,时间复杂度 O(1),额外空间 O(1)。4a+58.8 最大约 78.8,用 double 存小数,精度足够输出到 1 位小数。
- 1