题目描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入描述:
包括两行数据。
第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出描述:
包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
示例1
输入
100 200 150 140 129 134 167 198 200 111
110
输出
5
解答
这个题目很简单,但是可以对代码进行多次优化。
首先,常规读入高度和身高,这个没什么可优化的。
接下来分两步,一个是比较,一个是计算。
常规做法基本上是
但是,对于部分要卡常的题目来说,可能会爆掉,而且每次都调用寄存器来计算 ,很显然是一种浪费。
首先我们可以像多数题解那样,在读入 H 之后,直接对它进行 的操作。
但是实际上,比较的行为也可以简化。
电脑计算的时候分为三步:
1.计算的值 ()
2.调用if判断里面表达式的值是否为真
3.若真,对s进行的运算。
我们简化时可以发现,s每次加的值都是恒定的 1 。
联想到 : , 我们可以直接将逻辑值的结果加给s。
也即
CPP代码如下
首先,常规读入高度和身高,这个没什么可优化的。
接下来分两步,一个是比较,一个是计算。
常规做法基本上是
但是,对于部分要卡常的题目来说,可能会爆掉,而且每次都调用寄存器来计算 ,很显然是一种浪费。
首先我们可以像多数题解那样,在读入 H 之后,直接对它进行 的操作。
但是实际上,比较的行为也可以简化。
电脑计算的时候分为三步:
1.计算的值 ()
2.调用if判断里面表达式的值是否为真
3.若真,对s进行的运算。
我们简化时可以发现,s每次加的值都是恒定的 1 。
联想到 : , 我们可以直接将逻辑值的结果加给s。
也即
CPP代码如下
#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; }
来源:LynxPioneer