[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),这样会导致出完栈之后的最后一个数组没有比较而直接结束,因此我又添加了对最后一个出栈的数的比较。
———————————————

posted @ 2024-02-29 12:48  笠大  阅读(151)  评论(0)    收藏  举报