题目链接:P1046 [NOIP2005 普及组] 陶陶摘苹果
题目概况
[NOIP2005 普及组] 陶陶摘苹果
题目描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式
输入包括两行数据。第一行包含 个 到 之间(包括 和 )的整数(以厘米为单位)分别表示 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 到 之间(包含 和 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式
输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
提示
【题目来源】
NOIP 2005 普及组第一题
分析
设这10个树高分别为:、、、、、、、、、。
再设陶陶的身高为。
这个题目就是让我们求大于等于几个。
因此,程序如下。
程序
#include<bits/stdc++.h>
using namespace std;
int main()
{
int tree_high[10],high,sum;
for(int i=0;i<10;++i)scanf("%d",&tree_high[i]);
scanf("%d",&high);
for(int i=0;i<10;++i)
{
if(tree_high[i]<=high+30)
{
sum++;
}
}
printf("%d",sum);
return 0;
}
优化
首先,tree_high<=high+30这一条语句,high+30要反复计算,对性能会有一点影响,所以可以在循环之前将high加30;
其次,sum变化的时候要么加1,要么加0,所以可以改成sum+=(tree_high[i]<=high+30)。
优化后程序如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int tree_high[10],high,sum;
for(int i=0;i<10;++i)scanf("%d",&tree_high[i]);
scanf("%d",&high);
high+=30;
for(int i=0;i<10;++i)
{
sum+=(tree_high[i]<=high+30);
}
printf("%d",sum);
return 0;
}