洛谷题单2-P1046 [NOIP 2005 普及组] 陶陶摘苹果-python-流程图重构

题目描述

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

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

输入格式

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

输出格式

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

输入输出样例

输入

100 200 150 140 129 134 167 198 200 111
110

输出

5

说明/提示

【题目来源】

NOIP 2005 普及组第一题

方式

代码

class Solution:
    @staticmethod
    def oi_input():
        """从标准输入读取数据"""
        heights = list(map(int, input().split()))
        target = int(input())
        return heights, target

    @staticmethod
    def oi_test():
        """提供测试数据"""
        return [100, 200, 150, 140, 129, 134, 167, 198, 200, 111], 110

    @staticmethod
    def solution(heights, target):
        target += 30
        count = 0

        for i in heights:
            if i <= target:
                count += 1

        print(count)

oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution

if __name__ == '__main__':
    heights, target = oi_test()
    # heights, target = oi_input()
    solution(heights, target)

流程图

苹果判断循环
i ≤ target?
循环遍历苹果高度
for i in heights
count += 1
继续循环
开始
主函数调用
读取苹果高度列表
heights = list(map(int, input().split()))
读取陶陶身高
target = int(input())
计算总高度
target += 30
初始化计数器 count=0
输出结果
print(count)
结束
### 问解析 P1046 [NOIP 2005 普及组] 陶陶摘苹果是一道适合编程入门者的目,主要考察对数组、条件判断和循环结构的理解。目背景贴近生活,模拟了陶陶摘苹果的场景,要求计算陶陶能够摘到的苹果数量。解核心在于如何判断苹果的高度是否在陶陶能够达到的范围内。 目中给出的信息包括: - 10个苹果的高度。 - 陶陶手臂伸直能达到的最大高度。 - 陶陶站在板凳上时,板凳的高度为30厘米。 陶陶摘到苹果的条件是:苹果的高度 ≤ 陶陶站在板凳上能够达到的最大高度(即陶陶手臂高度 + 30厘米)。 ### 解方案 为了解决这个问,可以采用简的模拟方法。首先将10个苹果的高度存储在一个数组中,然后依次判断每个苹果是否在陶陶能够摘到的高度范围内。如果是,则计数器加1。最终输出计数器的值即可。 以下是一个C++实现的完整代码示例: ```cpp #include <iostream> using namespace std; int main() { int appleHeights[10]; int taotaoHeight, reachableHeight; int count = 0; // 读取每个苹果的高度 for (int i = 0; i < 10; ++i) { cin >> appleHeights[i]; } // 读取陶陶的手臂高度 cin >> taotaoHeight; // 陶陶站在板凳上能摘到的最大高度 reachableHeight = taotaoHeight + 30; // 判断能摘到的苹果数 for (int i = 0; i < 10; ++i) { if (appleHeights[i] <= reachableHeight) { count++; } } // 输出结果 cout << count << endl; return 0; } ``` ### 总结 该解采用的是最直接的模拟方法,适合初学者理解和掌握。通过数组存储数据,结合循环和条件判断进行处理,最终得出结果。这种方法在时间复杂度和空间复杂度上都表现良好,完全适用于本的数据规模。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值