top1编程
← 返回题目
题解

疯狂坠落的小球

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    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