P1046 陶陶摘苹果

题目描述

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1

100 200 150 140 129 134 167 198 200 111
110

输出 #1

5

这个题目很简单,但是可以对代码进行多次优化。

首先,常规读入高度和身高,这个没什么可优化的。

接下来分两步,一个是比较,一个是计算。

常规做法基本上是 if(height[i] <= H + 30)s++;

但是,对于部分要卡常的题目来说,可能会爆掉,而且每次都调用寄存器来计算 H+30,很显然是一种浪费

首先我们可以像多数题解那样,在读入 H 之后,直接对它进行 +=30的操作。

但是实际上,比较的行为也可以简化。

if(height[i] <= H )s++; 电脑计算的时候分为三步:

  1. 计算 height[i] <= H 的值 (true | false)

  2. 调用if判断里面表达式的值是否为真

  3. 若真,对s进行s+=1的运算。

我们简化时可以发现,s每次加的值都是恒定的 1 。

联想到 : true == 1 , false == 0 , 我们可以直接将逻辑值的结果加给s。

也即 s+=!(H<height[i]);代码如下

#include <iostream>
using namespace std;
int height[20],H,s;
int main()
{
    for(int i=0;i<10;i++)cin >> height[i];
    cin >> H;
    H += 30;
    for(int i=0;i<10;i++)s+=!(H<height[i]);
    cout << s;
}
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值