[NOIP2005 普及组] 陶陶摘苹果
[NOIP2005 普及组] 陶陶摘苹果
题目描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 1010 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 3030 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知 10 1010 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式
输入包括两行数据。第一行包含 10 1010 个 100 100100 到 200 200200 之间(包括 100 100100 和 200 200200 )的整数(以厘米为单位)分别表示 10 1010 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 100100 到 120 120120 之间(包含 100 100100 和 120 120120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式
输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
样例 #1
样例输入 #1
100 200 150 140 129 134 167 198 200 111
110
1
2
样例输出 #1
5
1
提示
【题目来源】
NOIP 2005 普及组第一题
题目解析
题目大意
本题是树上有十个苹果,长在不同的高度上。陶陶有一把高三十公分的凳子,求出他借助凳子最高可以摘到几个苹果。
题目分析
题目让用户输入十个苹果的高度和陶陶的身高,那么只需要依次遍历每个苹果的高度,和陶陶身高+凳高作比较,如果身高+凳高大于苹果高度,则统计他可以摘到的数量加一。
接下来就是考虑如何存储这十个苹果和让它们比较。
我们首先想到的就是使用一个一维数组来存储这十个苹果,然后通过依次遍历数组来判断大小。
其次可以考虑使用栈结构先存储苹果的信息,然后再依次出栈进行比较。
代码题解
解法1:数组
#include <iostream>
using namespace std;
int fun()//编写函数fun来处理异常输入
{
int n=0;//用户每次输入的苹果高度
cin>>n;
if(n<100||n>200)//非法输入
{
cout<<"error"<<endl;
return fun();//递归重新输入
}
else
{
return n;
}
}
int main()
{
int count=0;
int a[10];
for(int i=0;i<10;i++)
{
a[i]=fun();
}
int hight;//陶陶身高
cin>>hight;
hight+=30;//加了凳子后的总高度
for(int j=0;j<10;j++)
{
if(a[j]<=hight)//依次把苹果高和人的总高度比较
{
count++;
}
}
cout<<count;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
解法2:栈
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> apple_height;
int height,appleheight;
int count=0,counter=0;
do
{
int n;
cin>>n;
if(n>=100&&n<=200)
{
apple_height.push(n);
counter++;
continue;
}
else
{
cout<<"error"<<endl;
continue;
}
}while(counter < 10);
cin>>height;
height+=30;
while(!apple_height.empty())
{
appleheight=apple_height.top();
apple_height.pop();
if(appleheight<height)
{
count++;
}
}
// 额外判断最后一个符合条件的苹果
if (appleheight < height)
{
count++;
}
cout <<count;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
在第一次的程序中,我最后只判断到了while(!empty),这样会导致出完栈之后的最后一个数组没有比较而直接结束,因此我又添加了对最后一个出栈的数的比较。
———————————————

浙公网安备 33010602011771号