题解
大雄摘桃子
1 条题解
-
0
解题思路
大雄家门口的桃树结了 5 个桃子,每个桃子离地面高度不一样。大雄直接伸手最多能碰到某个高度,踩上 30cm 的板凳后,能碰到的高度就增加了 30cm。只要他能碰到桃子,桃子就会掉下来,所以问题就变成了:数一数有几个桃子的高度不超过“大雄手臂能到的最大高度 + 30”。
做法:
- 把 5 个桃子的高度读入数组
h[1]~h[5]。 - 读入大雄手臂能到达的最大高度 arm。
- 算出踩板凳后能到的最大高度
reach = arm + 30。 - 遍历 5 个桃子,凡是高度
h[i] <= reach的都能摘到,计数器加一。 - 输出计数器的值。
用样例验证: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)。
- 把 5 个桃子的高度读入数组
- 1