题解:洛谷 P1046 陶陶摘苹果

【题目来源】

洛谷:P1046 [NOIP 2005 普及组] 陶陶摘苹果 - 洛谷(luogu.com.cn)

【题目描述】

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 \(10\) 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 \(30\) 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知 \(10\) 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

【输入】

输入包括两行数据。第一行包含 \(10\)\(100\)\(200\) 之间(包括 \(100\)\(200\) )的整数(以厘米为单位)分别表示 \(10\) 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 \(100\)\(120\) 之间(包含 \(100\)\(120\) )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出】

输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【输入样例】

100 200 150 140 129 134 167 198 200 111
110

【输出样例】

5

【核心思想】

  1. 问题分析:给定10个苹果的高度和陶陶手伸直的最大高度,陶陶有30厘米高的板凳。求她能摘到的苹果数量。能摘到的条件:苹果高度 \(\le\) 陶陶身高 + 30(板凳高度)。

  2. 算法选择

    • 线性扫描:遍历10个苹果高度,逐一判断是否小于等于陶陶能够到的最大高度
  3. 关键步骤

    • 读入数据:循环读入10个苹果高度到数组 \(a[0..9]\),再读入陶陶身高 \(h\)
    • 计算最大高度h = h + 30(加上板凳高度)
    • 统计可摘数量\(i\)\(0\)\(9\)):
      • a[i] <= hnum++
    • 输出结果num
  4. 时间/空间复杂度

    • 时间复杂度:\(O(10) = O(1)\),固定遍历10个苹果
    • 空间复杂度:\(O(10) = O(1)\),固定大小数组
  5. 线性扫描的核心思想

    • 条件转化:"踩板凳能够到"转化为"苹果高度 \(\le\) 身高 + 30",统一判断条件
    • 计数器累加:满足条件的苹果直接计数,无需记录具体是哪些
    • 固定规模:苹果数量固定为10,无需考虑算法扩展性
    • 适用于简单统计、条件筛选、固定规模遍历类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件
using namespace std;

int main()
{
    int a[10], h;       // a[10]: 存储10个苹果的高度,h: 陶陶的身高
    int num = 0;        // num: 计数器,记录能够到的苹果数量

    // 输入10个苹果的高度
    for (int i = 0; i < 10; i++) {
        cin >> a[i];
    }

    // 输入陶陶的身高(单位:厘米)
    cin >> h;

    // 计算陶陶能够到的最大高度(身高+板凳高度30厘米)
    h = h + 30;

    // 遍历所有苹果,统计能够到的数量
    for (int i = 0; i < 10; i++) {
        if (a[i] <= h)  // 如果苹果高度小于等于能够到的最大高度
            num++;      // 计数器加1
    }

    // 输出能够到的苹果数量
    cout << num;

    return 0;  // 程序正常结束
}

【运行结果】

100 200 150 140 129 134 167 198 200 111
110
5
posted @ 2026-08-05 15:44  团爸讲算法  阅读(26)  评论(0)    收藏  举报