陶陶摘苹果

GitHub跳转原题关系图返回列表

伸手高度加上 30cm 板凳得到阈值 r=x+30,单遍统计 10 个苹果中 h_i ≤ r 的个数即为答案,O(1)。

OJ: roj

题目 ID: 1103

难度:入门

标签:入门条件判断python

创建: 2026-09-29 18:55

更新: 2026-10-05 01:15

题目描述

秋天苹果树上有 10 个苹果,已知每个苹果到地面的高度。陶陶伸手能达到的最大高度为 xx 厘米,摘不到时可以踩上一个 30 厘米高的板凳再试;碰到苹果苹果就会掉下来。输入:两行,第一行 10 个 100 到 200 之间的整数表示苹果到地面的高度,相邻整数用空格隔开;第二行一个 100 到 120 之间的整数 xx 表示伸手能达到的最大高度。输出:一行一个整数,表示能摘到的苹果数目。

样例输入:

text
100 200 150 140 129 134 167 198 200 111
110

样例输出:

text
5

思路

板凳是固定加成,先合成阈值 r=x+30r = x + 30,再把 10 个苹果逐个与 rr 比较。题面说碰到就掉,所以高度恰好等于 rr 的也算摘到,判断要用 ⩽\leqslant(样例里高度 140 的苹果正卡在边界)。数一数满足条件的个数直接输出即可。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 18:55
# update_at: 2026-09-29 18:55

import sys


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    apples = [next(data) for _ in range(10)]  # 题面固定 10 个苹果离地高度(cm)
    reach = next(data) + 30                   # 伸手最大高度 + 30cm 板凳 = 实际够到高度
    print(sum(h <= reach for h in apples))    # 碰到即掉:高度不超过 reach 就能摘


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 01:15
 * update_at: 2026-10-05 01:15
 */
#include <cstdio>

typedef long long ll;

ll apple[11]; // apple[i] 表示第 i 个苹果到地面的高度(厘米)

int main() {
    ll x = 0; // 陶陶伸手能达到的最大高度
    for (int i = 1; i <= 10; i++) {
        scanf("%lld", &apple[i]);
    }
    scanf("%lld", &x);

    // 板凳有 30 厘米高,先合成阈值;判断用 <=,恰好够到的苹果也算摘到
    ll reach = x + 30;

    ll ans = 0; // 能摘到的苹果数目
    for (int i = 1; i <= 10; i++) {
        if (apple[i] <= reach) {
            ans++;
        }
    }
    printf("%lld\n", ans);
    return 0;
}