数据结构前导课 | 2 披荆斩棘——只学C++,可以做哪些竞赛题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构前导课 | 2 披荆斩棘——只学C++,可以做哪些竞赛题相关的知识,希望对你有一定的参考价值。


戳一戳!和我一起走进信息学的世界

导读

信息学能够有助于孩子未来工作发展,提升孩子的综合能力。


这一期课,我们承上启下,简单复习信息学所有C++的知识体系,讲解一部分初赛和复赛的知识;然后就从顺序表和链表,开始一步一步走进数据结构的世界!


前一节课,我们复习了信息学C++的整体知识结构,这节课让我们一起来看一下掌握了这些知识结构,我们可以做哪些初赛题目。

往期回顾

【NOIP竞赛/CSP认证】

▶  赛前必看!信息学名师带你复习NOIP竞赛初赛及CSP认证初赛


【信息学精华帖】

▶  收藏!交流会内容全公开,让你陪孩子更好地学习信息学

▶  信息学的万般好处!附C++必备基础知识总结

▶  信息学提高班知识体系详解与家长常见问题解答!让孩子赢在提高班学习的起跑线!

▶  再回首,最全提高班知识总结,做更优秀的自己!


【数据结构前导课】

▶  数据结构前导课 | 1 温故知新——一篇文章领略信息学C++知识结构


【C++提高班教程】

▶  C++强化 | 01 新学期再出发!温故知新!

▶  C++强化 | 02 继续前行,三大结构终极介绍

▶  C++强化 | 03 一维数组入门

▶  C++强化 | 04 数组越界

▶  C++强化 | 05 一维数组经典应用

▶  C++强化 | 06 一篇文章带你掌握字符数组

▶  C++强化 | 07 二维数组

▶  C++强化 | 08 二维数组经典案例

▶  C++强化 | 09 一篇文章带你探索函数的奥秘

▶  C++强化 | 10 函数进阶必备

▶  C++强化 | 11 这样学递归,才不会觉得难

▶  C++强化 | 12 格式化输入输出与文件操作

▶  ​​C++强化 | 13 结构体入门

  ​​C++强化 | 14 结构体进阶


【C++基础班教程】

▶  C++总结 | 01 程序的世界

▶  C++总结 | 02 输出、换行与注释

▶  ​C++总结 | 03 变量定义、赋值与运算​

▶  ​C++总结 | 04 算术运算符与赋值运算符​

▶  ​C++总结 | 05 cin语句​

▶  ​C++总结 | 06 程序中的数据类型​

▶  ​C++总结 | 07 数据类型补充​

▶  ​C++总结 | 08 顺序结构​

▶  ​C++总结 | 09 if 和 if-else​

▶  C++总结 | 10 if嵌套与逻辑运算符

▶  C++总结 | 11 开关语句switch-case

▶  C++总结 | 12 for循环及其应用

▶  C++总结 | 13 数据范围与数据类型

▶  C++总结 | 14 break与continue

▶  C++总结 | 15 while与do-while

▶  C++总结 | 16 循环嵌套及其应用 



1 信息学竞赛总览

经过两个学期的学习,所有有关于C++基础的知识都全部讲解完毕,上一节课,我们也整体复习了信息学C++的全部知识体系,相信大家对信息学C++有更加清晰的认识和把握了。


这一部分,让我们先来一起认识一下信息学初赛吧!对于刚刚进入信息学世界的孩子们来说,能够接触到的信息学竞赛主要有两个:NOIP竞赛和CSP认证。让我们一起来简单了解一下NOIP竞赛和CSP认证吧!

1 NOIP竞赛

NOIP竞赛是历史比较久远的竞赛,NOIP竞赛分两个组,一个叫普及组,一个叫提高组。每组竞赛都包括初赛和复赛,不同地区的能够进入复赛的初赛分数线不同。


普及组和提高组的初赛题型大致类似,唯一不同在于最前面的选则题,普及组只有单选题,提高组还有不定项选择题。从题目角度的难度来说,普及组的难度小于提高组。


普及组和提高组的复赛都是给一个问题,然后写代码。普及组有四道,提高组有六道,一般来说,普及组的四道题和提高组的前四道题难度相近,题目的难度也是逐渐递增。

2 CSP认证

CSP认证之前主要是针对于计算机岗位工作人员,现在也面向中小学生,认可度略低于NOIP竞赛!CSP认证包括两个等级:CSP-J(Junior,入门级)和CSP-S(Senior,提高级)两个级别。


CSP的初赛难度低于NOIP竞赛,这是因为,CSP认证初赛中的题目都是选择题,这就说明我们可以使用一些答题技巧,并且选项会给我们提供思路,并带领我们一步一步理解题目。


虽然上面有很多差别,但是CSP认证中的题目涉及到的知识点与NOIP竞赛完全一致!所以大家不用担心,我们都会讲到。

3 说在后面的话

虽然两个比赛重要程度不同,考试题型不同,但是所有的知识点都是一样的,我们平常学习,会涉及到所有的知识点,在考前,会有具体的针对于不同类型考试的不同赛前辅导!所以,我们平时只需要跟着老师好好学即可。


接下来,让我们围绕着难度更高的NOIP竞赛的题型来分析一下,对于当前的我们来说,信息学竞赛初赛题目,我们都能做哪些?



2 选择题

NOIP竞赛第一部分就是选择题,对于普及组来说,只有单项选择题,近几年,选择题有15道,每道题2分。对于提高组来说,既有单项选择题(10道,每道2分),又有不定项选择题(5道,每道2分)。


选择题中,有一部分是程序设计,其余部分为:


计算机基础理论
编码、进制
数据结构
数学、逻辑与算法


这四部分,我们在后面的课程中会逐步给大家讲解。

1 单选题

以下面这道题目为例:


数据结构前导课


这个题目就需要我们认真分析:


循环第一轮,n++,n变为1,n%3≠0,执行下一轮;


循环第二轮,n++,n变为2,n%3≠0,执行下一轮;


循环第三轮,n++,n变为3,n%3=0,k--,k变为3,执行下一轮;


循环第四轮,n=k,退出循环。


最后结果n和k都是3,选择D。


对于单项选择题,我们一般都是认真分析,找到结果即可,程序设计这一部分,单项选择题,主要是围绕分析程序执行结果补充程序两个部分。


这两个主要是培养大家能读懂别人的程序,优化完善别人的程序的能力,在选择题中,这两个部分比较简单。初赛中的最后两大块分别就是阅读程序写结果和补充程序题,那两大块会涉及一些数据结构和算法的知识,难度比较大。

2 不定项选择

以下面这道题目为例:


数据结构前导课


分析一下上面这道题目,对于B和D,循环条件使得循环体内无法执行,需要改为i<=100才可以。所以这道题目选择AC。


对于不定项选择题,我们需要认真审视每一个选项,才能保证做对。不定项选择题主要是给一个功能,判断下列的做法哪几个是正确的

3 问题求解题

问题求解题我们也可以当做填空题,问题求解题只有两道,每道5分,每道题可能有多个空。


问题求解题一般都围绕数据结构、数学、逻辑和算法这几部分。没有出过与程序设计相关的题目,在这我们就不展开说明了。

4 阅读程序题

阅读程序题,就是根据给定的程序分析程序的执行结果!对于NOIP竞赛来说,就需要我们自己一步一步分析了,对于CSP认证来说,它会给多个选择题,一步一步引导我们去思考。只要我们能掌握NOIP竞赛的题目,CSP认证的题目也就不在话下了。




NOIP竞赛中,阅读程序题有4道,每道题8分;一般来说,第一道题都是最简单的,只需要简单分析一下就能出结果,这道题我们以目前的能力都是会做的。第二道题和第四道题,难度有所提升,其中有一道题需要我们按照他的程序认真分析,将输入带入执行一遍程序即可得到答案;另外一道题目,直接求解会非常难,但是我们可以阅读程序,了解程序功能,根据程序功能自己分析输入得到输出。第三道题,一般都是最难的,并且会结合递归,需要我们一步一步,认真分析,得到最终结果。


对于现在的我们来说,我们必须要掌握第一道题,有能力的同学可以去接触并掌握二题和四题,第三题,需要我们不断练习,不断提升。

1 16年普及组第一题

我们首先看一下16年普及组的第一题:


数据结构前导课


我们仔细分析,首先我们输入第一个变量,第一个变量不为零,计数器count+1变为1,sum也加变为第一个值。


在循环中,只要我们的输入不为0,我们就会一直将输入加到sum上去,也会统计输入的个数,然后会分别求每次的最大和最小值。


根据上面的分析,我们知道:


max保存的是第一个0以前的最大值,
min保存的是第一个0以前的最小值,
sum保存的是第一个0以前的所有数的和,
count保存的是第一个0以前的所有数的个数。


我们看输入,我们知道0之前的最大值为6,最小值为1,sum为(1+2+3+4+5+6)= 21,count为6,所以输出为:


6,1,3


21/6=3(注意是整数类型)。


2 18年普及组的第一题

我们接下来看一下18年普及组的第一题:


数据结构前导课


看这个代码我们知道,如果是大写字母字符,就让其变为其后面的字符,其他的不变,所以输出结果为:


RuanHuoMianTai


5 完善程序题

最后一部分就是完善程序题,这一部分题目,需要我们能理解出题者的意图,按照出题者的意图完善程序。完善程序题会说明题目的功能。


完善程序题有两道,一般每道题14分,也有可能两道题分值不同,总分28分是固定的。


一般来说,完善程序题都会涉及到具体的数据结构或者数学算法,需要我们学习了后面的知识才能更好地做相关题目。在这里,我们举个例子让大家了解完善程序题。

1 字符数字删除

我们看一下下面这道题目:


字符数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。(每空3分,共12分)


数据结构前导课


对于第一个空来说,如果这个字符不是数字字符,就会保存下来,判断条件就应该是字符<0或者字符>9,也就是说第一个空应该填  ||


当我们执行完上面的操作,就说明我们又多了一个非数字字符,j表示的是当前的非数字字符,所以就该让j+1,第二个空可以是如下三种:j++++jj+=1


对于第三个空,注意两点,第一个点函数返回值类型是int,所以肯定不是让我们返回删除整数字符后的字符串,应该是返回一个整数。再看主函数中,函数的返回值传给了变量len,len是删除整数字符后的字符串长度,所以函数返回值应该是j,也就是说第三个空为 j

第四个空就很简单了,就需要我们把每个字符输出即可,注意输出时的索引为i,也就是第四个空为 s[i]


总结一下,答案如下:


(1)||
(2)j++ 或 j=j+1 或 ++j
(3)j
(4)s[i]



6 作业

本节课的作业,就是复习上面的习题,并完成下面的题目!

1 阅读程序题

分析下面这道题目的执行结果:


数据结构前导课


要求能分析出程序的功能,并求程序的输出结果。



AI与区块链技术

数据结构前导课

长按二维码关注

以上是关于数据结构前导课 | 2 披荆斩棘——只学C++,可以做哪些竞赛题的主要内容,如果未能解决你的问题,请参考以下文章

AI前导课-第一课AI概览(2018/10/20)

c,c#,c++,等等的听说了很多,但只学了c,有没有来科普一下的

3天,让你的C++从入门到精通

小白的成长轨迹:披荆斩棘,未来可期

小白的成长轨迹:披荆斩棘,未来可期

小白的成长轨迹:披荆斩棘,未来可期