全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之一维数组(应用一)

实战训练1---小明摘桃子

问题描述:

小明家院子里有棵桃树,桃子成熟的时候,小明就会带着30厘米高的板凳跑去摘桃子,当他不能直接用手摘到桃子的时候,就会踩到板凳上再试试。桃树上每次都是10个桃子,现在已知桃子到地面的高度,以及小明把手伸直的时候能够达到的最大高度,请帮小明算一下他能够摘到的桃子的数目。假设他碰到桃子,就会掉下来。

输入格式:

输入包括两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个桃子到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100∼130 (包含100和130 )的整数(以厘米为单位),表示小明把手伸直的时候能够达到的最大高度。

输出格式:

输出一行,这一行只包含一个整数,表示小明能够摘到的桃子的数目。

输入输出样例:

|---------------------------------------------|-------|
| 输入样例1 | 输出样例1 |
| 110 198 150 140 139 124 167 198 200 115 115 | 5 |
| 输入样例2 | 输出样例2 |
| 120 188 157 135 149 128 162 193 200 116 130 | 6 |

问题分析:

根据题意,首先考虑桃子的存储问题,由于涉及到的桃子数量多,所以使用刚学习的数组来解决此问题,数组的数据类型使用int类型,长度为10,定义好数组之后,使用循环来输入每个桃子的高度存储到数组元素中;然后输入小明伸直手臂的高度,加上板凳的30cm,即为小明可以够到的最大高度;紧接着将小明可以达到的最大高度依次和桃子的高度进行比较,只要桃子的高度小于等于最大高度,即可摘到桃子。具体程序代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    const int MAXLEN =10;//定义常变量MAXLEN表示数组的长度,并初始化为10 
    int count=0;//定义可以摘到的桃子数量变量count并初始化为0 
    int a[MAXLEN];//定义数组a 
    for(int i =0;i<10;i++){//数组下标从0开始到10-1=9结束 
        scanf("%d",&a[i]);//依次输入每个桃子高度到数组元素 
    }
    int cd;//定义小明手臂伸直可以达到的高度cd 
    cin>>cd;//输入cd的值 
    cd = cd+30;//加上板凳可以达到的最大高度 
    for(int i=0;i<10;i++){ 
        if(cd>=a[i])//最大高度大于等于桃子的高度 
            count++;//则将count加1 
    }
    printf("%d\n",count);//输出count的值 
    return 0;
}

实战训练2---小明的数字游戏

问题描述:

输入n个整数,以0结束,反向输出。(0<=n<=100)

输入格式:

输入一行,该行内输入一串整数,以0结束,以空格间隔。

输出格式:

输出一行,该行内倒着输出这一串整数,以空格间隔。

输入输出样例:

|---------------|-------------|
| 输入样例1 | 输出样例1 |
| 1 2 3 4 5 0 | 5 4 3 2 1 |
| 输入样例2 | 输出样例2 |
| 500 400 200 0 | 200 400 500 |

问题分析:

根据题意,需要输入不确定个数的整数,最大的个数不超过100个,所以在定义数组的长度可以在最大个数的基础上加5,总长度为105,数组的数据类型为int类型,使用循环为数组每个元素依次赋值,在输入的过程中,一旦判断发现数组元素的值为0,那么停止输入数组元素,然后从最后一个元素开始,依次输出每个数组元素,具体程序代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    const int MAXLEN=105;//定义常变量MAXLEN表示数组的长度 
    int a[MAXLEN];//定义长度为MAXLEN的int类型数组 
    int i;//定义数组的最后一个元素下标 
    for(i=0;i<MAXLEN;i++){//从0开始到MAXLEN 
        scanf("%d",&a[i]);//依次输入数组元素的值 
        if(a[i]==0)//如果数组元素的值为0 
            break;//停止输入跳出循环 
    }   
    for(int j=i-1;j>=0;j--){//由于最后一个元素是0,所以从倒数第二个数组元素开始到0, 
        printf("%d ",a[j]);//依次输出每个数组元素 
    } 
    return 0;
}

实战训练3---计算报名费

问题描述:

下面是一个兴趣班的报名费表格:

|-------|---------|
| 名称 | 费用 |
| 奥数 | 28.9元/节 |
| 英语角 | 32.7元/节 |
| 几何世界 | 45.6元/节 |
| 航天模组 | 78元/节 |
| 围棋 | 35元/节 |
| C++编程 | 86.2元/节 |
| 民乐 | 27.8元/节 |
| 国画 | 43元/节 |
| 流行舞 | 56元/节 |
| 趣味编程 | 65元/节 |

给定每种兴趣班的报名节数,编程计算应付的总费用。

输入格式:

输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买奥数、英语角、几何世界、航天模组、围棋、c++编程、民乐、国画、流行舞、趣味编程的节数。每两个整数用一个空格分开。

输出格式:

输出一行,包含一个浮点数表示应付的总费用,精确到小数点后一位。

输入输出样例:

|---------------------|--------|
| 输入样例1 | 输出样例1 |
| 2 6 1 5 3 8 2 1 7 3 | 2169.8 |
| 输入样例2 | 输出样例2 |
| 9 3 2 1 4 5 8 7 3 6 | 2179.8 |

问题分析:

根据题意,每门兴趣课都有对应的价格,因此采用数组将价格进行存储,需要定义一个长度为10的double类型数组,然后依次输入每门兴趣班的节数,节数和对应的价格进行相乘,并累加到总价格中,具体程序代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    const int MAXLEN=10;//定义常变量MAXLEN表示数组的长度  
    double price[MAXLEN]={28.9,32.7,45.6,78,35,86.2,27.8,43,56,65};//定义长度为10的double类型数组存储价格 
    double sum=0;//定义总价格变量sum并初始化为0 
    for(int i=0;i<10;i++){//然后依次输入每门兴趣课的节数,兴趣课节数和数组中的价格一一对应 
        int tmp;//定义节数变量tmp 
        scanf("%d",&tmp);//输入tmp的值 
        sum += price[i]*tmp;//将这门课的价格累加到总价格sum中 
    }
    printf("%0.1lf\n",sum);//格式化输出sum的值   
    return 0;
}
相关推荐
LabVIEW开发5 分钟前
LabVIEW中算法开发的系统化解决方案与优化
算法·labview
Phoebe鑫7 分钟前
数据结构每日一题day17(链表)★★★★★
数据结构·链表
梁下轻语的秋缘10 分钟前
每日c/c++题 备战蓝桥杯(洛谷P1115 最大子段和)
c语言·c++·蓝桥杯
wen__xvn11 分钟前
每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
c++·职场和发展·蓝桥杯
chenyuhao202411 分钟前
链表面试题7之相交链表
数据结构·算法·链表·面试·c#
Pluchon23 分钟前
硅基计划2.0 学习总结 壹 Java初阶
java·开发语言·学习·算法
PassLink_28 分钟前
[计算机科学#14]:数据结构
数据结构·计算机科学·计算机发展史
筏.k31 分钟前
智能指针入门:深入理解 C++ 的 shared_ptr
开发语言·c++·c#11.0
仙人掌_lz35 分钟前
理解多智能体深度确定性策略梯度MADDPG算法:基于python从零实现
python·算法·强化学习·策略梯度·rl
陌尘(MoCheeen)1 小时前
技术书籍推荐(002)
java·javascript·c++·python·go