到这里,就可以解决很多比较复杂的实际问题了。
例6-12 (NOIP2005-普及组复赛-第一题)陶陶摘苹果
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式:包括两行数据。第一行包含10个100~200(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100~120(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式:包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
思路分析:
很简单。只要用陶陶把手伸直能够达到的最大高度加上板凳的高度后和每个苹果的高度一一进行比较即可判断能不能摘到,能摘到的话计数器加1就可以了。
程序清单:
运行结果如下。
输入:
输出:5
例6-13 学校合唱比赛,请了10位评委打分。在计算成绩时,要求去掉一个最高分,去掉一个最低分,然后求出平均分作为每个班的成绩。
思路分析:
(1)用一个循环输入10个评委给出的分数。
(2)用一个循环计算10个评委给出分数的总和,同时找出最高分和最低分。
(在例6-3中,曾经用打擂台的办法找出最高分,打擂台的同时也可以找出最低分。)
(3)从总分中减去最高分和最低分,然后求平均数输出。
程序清单:
运行结果如下。
输入:
输出:
例6-14 17个猴子围成一圈,从某个开始报数1-2-3-1-2-3-……报“3”的猴子就被淘汰,游戏一直进行到圈内只剩一只猴子,它就是猴大王了。
思路分析:
(1)每只猴子有被淘汰和未被淘汰两种状态,因此可以用bool型数组存储所有猴子的状态。用true表示被淘汰,false表示未被淘汰。
(2)开始的时候,给数组中所有元素赋初值为false,表示所有猴子都未被淘汰。
(3)模拟报数的过程,直到只剩下一只猴子,它就是猴大王。
(4)每一轮报数需要枚举圈中所有的位置,要定义一个整型变量pos,也需要一个整型变量v统计每一轮报数后剩下的猴子数目,还要一个用于报数计数的整型变量s。
程序清单:
运行结果:
猴大王是:11号!
一、选择题
1.以下关于数组的描述正确的是( )。
A.数组的大小是固定的,但可以有不同的类型的数组元素。
B.数组的大小是可变的,但所有数组元素的类型必须相同。
C.数组的大小是固定的,但所有数组元素的类型必须相同。
D.数组的大小是可变的,但可以有不同的类型的数组元素。
2.以下数组定义不正确的是( )。
A.int n;cin>>n;int a[n]; B.int n=10,a[n];
C.int a(10); D.const int size=10;int a[size];
3.定义数组“int a[10];”,则对数组元素的正确引用是( )。
A.a[10] B.a[3,5]
C.a(5) D.a[10-10](www.xing528.com)
4.以下能对一维数组a正确初始化的语句是( )。
A.int a[10]=(0,0,0); B.int a[]={};
C.int a[]={0}; D.int a[10]={10∗1};
5.在执行int a[][3]={1,2,3,4,5,3};语句后,a[1][0]的值是( )。
A.4 B.1
C.2 D.5
6.若有说明int a[3][4]={0};则下列叙述正确的是( )。
A.只有元素a[0][0]可以得到初值0
B.此说明语句不正确
C.数组中各元素都可以得到初值,但其值不一定为0
D.数组中每个元素都可以得到初值0
7.在定义“inta[5][6];”后,数组a中的第10个元素是( )。(设a[0][0]为第一个元素)
A.a[2][5] B.a[2][4]
C.a[1][3] D.a[1][5]
8.如有定义语句int a[] ={1,8,2,8,3,8,4,8,5,8};则数组a的大小是( )。
A.10 B.11
C.8 D.不定
9.若二维数组a有m列,则在a[i][j]前的元素个数是( )。
A.j∗m+i B.i∗m+j
C.i∗m+j-1 D.i∗m+j+1
10.对两个数组a和b进行如下初始化:
则以下叙述正确的是________。
A.a与b数组完全相同; B.a与b数组长度相同;
C.a数组比b数组长度短; D.a数组比b数组长度长;
二、读程序写结果
3.(NOIP2008普及组初赛阅读程序题1)
输入:9 19 29 39 输出:__________
4.(NOIP2013普及组初赛阅读程序题3)
输入:输出:
三、程序填空
1.输入30个数,输出它们的平均值,输出与平均值之差的绝对值最小的数组元素。
2.从键盘输入一行字符,要求从中删除一个指定的字符。
四、编写程序
1.输入一个班中50个学生的数学成绩,将成绩从高到低排序。
2.现在N个数已经从小到大排好顺序,要求输入一个数,把它插入到原有的序列中,并且要保持由小到大的顺序。
3.打印杨辉三角形。
4.约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;……依次输出出圈的人的编号。N、M由键盘输入。
5.校门外的树(NOIP2005普及组第2题)
某校大门外长度为L的马路上有一排树,每两棵相邻的树的间隔都是1米。可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0、1、2、…、L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入:第一行有两个整数L(1<=L<=10000)和M(1<=M<=100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出:包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。