top1编程
← 返回题目
题解

大雄摘桃子

1 条题解

  • 0
    @ 2026-8-5 1:30:41

    解题思路

    大雄家门口的桃树结了 5 个桃子,每个桃子离地面高度不一样。大雄直接伸手最多能碰到某个高度,踩上 30cm 的板凳后,能碰到的高度就增加了 30cm。只要他能碰到桃子,桃子就会掉下来,所以问题就变成了:数一数有几个桃子的高度不超过“大雄手臂能到的最大高度 + 30”。

    做法:

    1. 把 5 个桃子的高度读入数组 h[1]~h[5]。
    2. 读入大雄手臂能到达的最大高度 arm。
    3. 算出踩板凳后能到的最大高度 reach = arm + 30。
    4. 遍历 5 个桃子,凡是高度 h[i] <= reach 的都能摘到,计数器加一。
    5. 输出计数器的值。

    用样例验证:5 个桃子高度 100 200 150 140 129,手臂高度 110,加上板凳能到 140,小于等于 140 的有 100、140、129 共 3 个,输出 3,和样例一致。

    参考代码

    // P4498 大雄摘桃子:站在30cm高的板凳上,能摘到高度不超过(手臂高度+30)的桃子,统计能摘到的个数
    #include <iostream>
    using namespace std;
    int h[6];
    
    int main() {
        // 读入5个桃子到地面的高度
        for (int i = 1; i <= 5; i++) cin >> h[i];
        int arm;
        cin >> arm;                // 读入大雄手臂能到达的最大高度
        int reach = arm + 30;      // 踩上板凳后能到达的最大高度
        int cnt = 0;               // cnt 记录能摘到的桃子个数
        for (int i = 1; i <= 5; i++)
            if (h[i] <= reach) cnt++;   // 能碰到桃子,桃子就会掉下来
        cout << cnt << '\n';       // 输出能摘到的桃子数目
        return 0;
    }
    

    复杂度分析

    • 读入 5 个桃子高度并统计,只需要扫一遍 5 个桃子:O(1)。
    • 因为桃子数量固定为 5,所以时间和空间都是常数。

    总时间复杂度 O(1),空间复杂度 O(1)。

    • 1