下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

写在前面的话

欢迎开始“蓝桥杯软件类大赛”的学习与备赛!

蓝桥杯软件类大赛实质上是算法竞赛,本书定位的读者是初学者,他有这样的初始能力:

(1)刚学过编程语言,C/C++、Java、Python这三种语言任何一个都行;

(2)具备了基本的编码能力,不需要再问语法问题;

(3)编码仍然不熟练;不懂算法,遇到较难的问题没有思路。

他有这样的学习目标:

(1)深入学习算法知识,提高自己的计算思维能力;

(2)做有难度的编码,提高编码能力;

(3)参加蓝桥杯软件类大赛并获奖。

如果你符合上述初学者画像,那么本书就是你高效实现目标的“脚手架”。

下面就来了解算法竞赛的相关事宜,以及如何高效地备赛。

正确看待算法竞赛

在大学学习过程中,既有面向学位要求的专业课程,又有面向非学位要求的竞赛、创新项目、课题等学习活动。虽然参加竞赛活动是课余的、非强制性的,但是竞赛活动能有力地帮助参赛者强化巩固所学的专业知识,提高思维和动手能力,提升专业水平。不少竞赛活动的含金量也足以证明学生的专业能力,从而使学生在保研、找工作时获得优势。

在权威的全国普通高等院校的学科竞赛排行榜上,蓝桥杯大赛名列其中,是广受欢迎的信息类专业竞赛。其中,蓝桥杯软件类大赛目前已成为参赛人数最多的大学计算机编程竞赛,获得了高校和就业单位的广泛认可,其奖牌是大学生计算机编程能力的一个有力证明。

通过本书的学习,读者不仅有能力获得蓝桥杯软件类大赛的奖项,也有能力在其他算法竞赛中获奖,而且将来在找工作面试时遇到算法题也不用紧张。

从就业需求看,算法竞赛可以说是十分实用的,甚至是带些许“功利色彩”的竞赛。其他类别的一些竞赛活动也能有助于参赛者提高思维能力或锻炼动手能力,但不一定能将这些能力的提升直接体现到就业竞争力上,而通过算法竞赛培养出的计算思维能力、编程能力,则能直接服务于计算机专业工作中,因而算法竞赛的获奖者是企业非常欢迎的人才。常看到这样的新闻:有人在中学时参加了全国青少年信息学奥林匹克竞赛,上大学后从大一开始就能找到公司实习,并且能力超出一般的大学毕业生。不少非计算机专业的学生,在算法竞赛获奖之后,也能从事计算机程序员的工作,并且能力很强。更何况计算机专业的学生,他们在学习算法竞赛后则如虎添翼,能力上升一个大台阶!

算法竞赛具体培养哪些能力?从就业角度看,一名出色的程序员需要经过以下几方面的锻炼。

1.编写大量代码

编程不是纸上谈兵,而是动手写出合格并高效的代码。在编写代码上进行大量的训练,是成为杰出程序员必下的功夫。

2.学习各种算法知识

算法是计算机程序的灵魂,每个计算机问题都需要采用适当的算法来解决,例如分析算法的时间复杂度、空间复杂度,从而通过代码来高效地完成任务。竞赛主要考核如何根据具体情况灵活地应用算法,这能很好地促进参赛者对算法的理解与掌握。

3.培养计算思维和逻辑思维

一道竞赛题往往需要参赛者综合运用多种知识与方法,例如数据结构、算法知识、数学方法、流程和逻辑等,这是计算思维和逻辑思维能力的体现。

4.掌握多种编程语言

对于蓝桥杯软件类大赛而言,其用到的编程语言就有C/C++、Java、Python。其中,C/C++因运行效率高、拥有丰富的STL函数库,最受参赛者欢迎。Java和Python也很常用,特别是Python,其上升势头越来越明显。当然,对于这几种编程语言,就业市场上都有大量的相应岗位需求,参赛者掌握得好,就业要容易得多。

如何高效备赛

刚接触蓝桥杯软件类大赛的参赛者往往有这样的困惑:大赛似乎很难、很花时间,不仅难以入门,而且学习成本很高,往往需要半年以上,甚至一年、两年的勤奋学习,才能获得较好的成绩。

本书正是为了解除这样的困惑而编写的:通过本书的学习,你能从一名算法竞赛的“小白”,开始成长为熟悉算法知识、构建起算法思维、拥有高效编码能力的计算机编程人才。

好学上进的你肯定有这样的期望:我想得奖,尽快得奖!

这本书是得奖的捷径吗?答案是确定的!然而,“捷径”往往是“艰难”的代名词。“捷径”并不一定意味着省力,正如爬山的捷径往往更陡峭、更令人费力一样。在算法竞赛的学习这件事上,“捷径”意味着要付出更大的努力,要进行高强度的学习。本书之所以能成为得奖的“捷径”,是因为所提供的知识点更为集中、讲解更清晰、题目设置更有针对性。是否能走通这个“捷径”,取决于你愿意付出多少时间和精力。

学习算法竞赛,请注意以下几个重要问题。

1.刷题

在面向算法竞赛的所有学习方法中,最重要的一种方法是“刷题”。也就是大量做题,在做题时进行建模训练和编码练习。只读理论、只看书,而不做题,学习效果只会略大于零,能力得不到提高,肯定不能得奖。《天龙八部》里的王语嫣,是位武学理论大师,但手无缚鸡之力,打不过一个没学过任何武功的人。要成为真正的编程高手,只能通过大量做题,才能真正理解算法知识、提高编程能力,并在竞赛中发挥出水平。

那么,“刷”多少题合适?本书介绍了算法竞赛中处于初级和中级层次的知识点,读者可每个知识点做10~20题,总共要做600~1000题,多多益善!

初学者问 :“啊,要做这么多题吗?太累了!”

我的回答 :“没其他办法,这是算法竞赛的必由之路。”

2.速度

参加算法竞赛,编程速度极为重要。蓝桥杯软件类大赛要求在4小时内完成10道题,时间非常紧张。因而,编程速度是所获奖项级别的重要影响因素。

如何提高编程速度?读题要快!对于每道题,都需要建模后才能进行编程。在竞赛时能快速读完题目并思考出合适的算法,是需要经过大量做题训练的。训练会提高大脑的兴奋度,用最快的速度理解题目并建立计算机编程模型。

此外,为加快做题速度,还需要注意以下3点。

(1)熟练掌握集成编译环境。

(2)减少调试,最好是写完程序后,争取一次能通过测试样例。为了减少调试,尽量使用不容易出错的方法,例如少用指针、多使用静态数组、将逻辑功能模块化等。注意,不要使用动态调试方法,不要用单步跟踪、断点等调试工具。因为这样会很慢,况且算法竞赛的代码不长,用不着这样做。如果需要查看中间的运行结果,就在代码中的关键地方打印出调试信息。

(3)使用库函数。如果题目涉及比较复杂的数据处理,或者像sort()这样需要灵活排序的函数,用库函数可以大大地减少编码量,并减少错误的发生。注意积累C++、Java、Python编程语言的库函数。

3.模板

模板是某些数据结构、算法的标准代码,可谓计算机科学发展过程中众多高手提炼出的“精华”。

初学者问: 我想速成,来不及做很多题,不过我可以多准备一些模板,竞赛的时候套一套模板,是不是也能获奖?

我的回答: 模板有用且需要掌握,但是,在赛场上模板的作用有限。

模板很有用,例如并查集模板、快速幂模板、埃氏筛模板等,需要参赛者牢记并熟练应用。学习经典算法时,往往也需要整理模板并要多次地学习和使用。有必要强调的是,对于模板中的代码,参赛者得真正理解并多次使用过,才能在做题时快速地应用于编程。

有的算法竞赛可以带纸质资料进场,相当于开卷考试,例如ICPC、CCPC,有不少参赛者带了打印出来的厚厚一沓代码资料和各种书籍进场竞赛。但是,蓝桥杯软件类大赛采用的是闭卷形式,禁止带任何资料进场,因而参赛者要完全靠脑力,模板要靠“背”!这就增加了一定的难度。

不过,把模板带到赛场上用处大吗?答案是“90%的否定”!换句话说,想靠模板速成、急着用来参赛获奖是不现实的。

首先,赛场上的题目基本是新题,也就是以前没有出现过的(按道理是这样,至于命题人是不是按道理办事,就是主办方的责任了)。做题少、对知识点理解不深的初学者难以知道应该套用哪个模板。

其次,不能直接套用模板。不同的编程题目,即使用到相同的算法或数据结构,也往往不能直接使用同样的代码,而是要作出很多修改,因为不同环境下的变量和数据规模是不同的。对于模板的学习和使用,需要花时间融会贯通,不能急于求成。参赛者应在深入理解和熟练地掌握模板之后,才能将之应用到竞赛解题中。为了避免参赛者直接套用模板,蓝桥杯软件类大赛的命题人甚至会在出题上“绕圈子”。因而不能原封不动地“抄”模板,而是要灵活运用。

初学者看到这里,可能想打退堂鼓了。但是,请记住“成本越高,收益越大”。学习备赛累、提高编码水平累,这的确是一道门槛,但也正是如此才能筛选出真正的计算机编程能手。如果一个技能很容易掌握,那这个技能大多是大众化的,含金量不高;而像蓝桥杯这样的竞赛,的确是不好学且学习成本高,但能学出来的就是高手,毕业后也能有更光明的就业前景。

有学生是零基础,是刚开始学编程语言,想等学完之后再开始算法竞赛的学习。不要等!因为算法竞赛的编码用不着复杂语法,而且初学者也能将竞赛题当成编程语言的练习题来做。

自主学习,最大的动力是自己!也要找同学一起学,不要自己一个人,有难度的学习,需要互相鼓励,一起进步。

让我们一起走进算法竞赛的“星辰大海”!

蓝桥杯大赛官方资源的获取

蓝桥云课是蓝桥杯大赛的官方资源平台。对于本书所提供的题目,读者都可以在蓝桥云课上进行模拟训练,其内嵌了在线评测系统,能进行自动判题,并返回有关正误的提示,从而帮助读者可以完全自主地高效学习编程。蓝桥云课所提供资源的相关链接如下。

● 链接1:蓝桥杯大赛官方网站,dasai.lanqiao.cn。

● 链接2:Python 3自带标准库,https://docs.python.org/3/library/index.html。

● 链接3:蓝桥杯大赛历届真题,https://www.lanqiao.cn/courses/2786。

● 链接4:蓝桥杯官网题库,www.lanqiao.cn/problems,以下简称lanqiaoOJ。

需要特别指出的是,lanqiaoOJ提供了海量的算法竞赛经典例题及蓝桥杯软件类大赛的历年真题,真题所使用的评测数据与大赛评分时使用的测试数据一致。如果你参加了大赛,那在赛后于蓝桥云课的“链接3”或“链接4”中提交源代码,可得到最接近于实际成绩的结果。如果你正在备赛,那么可以在蓝桥云课中找到完整的算法学习路线与训练体系,其能在很大程度上帮助你取得好成绩。

对于本书例题的解答,虽然书中以C++为主,并在必要时提供了Python的代码以供读者对照学习,但实际上每道题均提供了C++、Java、Python三种语言的参考代码,所有的参考代码均可在本书配套资源中获取。

此外,蓝桥云课的社区资源相当丰富,不仅有专为蓝桥杯软件类大赛展开的话题,还涵盖了计算机相关岗位求职就业的内容。

罗勇军
2022年8月,上海 LB3qVjSWzDWRTvEpoGSf27PA0HWXyiTmXlGU8pgaBG5rIyvOT3s6Aw8sxieBiitY

点击中间区域
呼出菜单
上一章
目录
下一章
×