新書推薦:
《
DK地球博物大百科
》
售價:HK$
294.8
《
非洲潜力丛书4 生计之道,为而不争:探究生态资源与人类的关系
》
售價:HK$
86.9
《
钱经 商圣范蠡的财富智慧 跨越千年的“正财阳谋”,普通人逆袭、高净值人群守成的底层逻辑
》
售價:HK$
65.8
《
儿童发展与心理治疗
》
售價:HK$
74.8
《
文献检索与论文写作初步
》
售價:HK$
49.5
《
北京城史记 明代卷
》
售價:HK$
151.8
《
懂得:影响你一生的DISC识人术(修订版)
》
售價:HK$
74.8
《
ROS 2机器人操作系统与Gazebo机器人仿真(微课视频版)
》
售價:HK$
97.9
編輯推薦:
考纲同步:严格对标《全国青少年信息学奥林匹克系列竞赛大纲》要求。
解题利器:120个经典案例解析 500多道编程实战题 ,揭秘隐藏在代码里的算法思维。
名师带练:300个视频精讲,手把手教你攻克难点。
硬核内容:40章科学进阶,助力中小学生高效攻克信息学竞赛入门难关,为中级、高级知识打下坚实基础!
內容簡介:
本书是专门为中小学生编写的信息学竞赛系列教程之一。作者根据中国计算机学会发布的《全国青少年信息学奥林匹克系列竞赛大纲》,将知识点按难度划分为三个层级:初级、中级、高级,分别对应三本教程,每本教程包含40章内容。本书为初级教程,包括基础算法专题、进制转换、位运算、编码问题、数列问题、高精度专题、字符串处理、时间和日期处理、数据结构专题、排序专题、搜索专题、动态规划专题、数论专题、组合数学专题、图论专题等内容。每章采用“理论 实践”的教学结构:先介绍算法思想或基础知识,再通过经典的竞赛题目来讲解算法的实现。本书配备了完善的题库、课件、教学视频等资源,可以作为中小学信息学竞赛集训队的训练教材,也可以作为少儿编程培训机构的培训教材,还可以作为少儿编程等级考试和编程竞赛的辅导教材。
關於作者:
王桂平
计算机科学与技术专业博士、副教授、硕士研究生导师。自2003年起从事大学生程序设计竞赛指导工作,带队参加过浙江省、重庆市、四川省、广东省大学生程序设计大赛、中国大学生程序设计大赛、国际大学生程序设计大赛、团体程序设计天梯赛、蓝桥杯全国软件和信息技术专业人才大赛等赛事,指导学生累计获得国家级奖项100余项,省级奖项1000余项。
出版了《C 趣味编程及算法入门》《C 编程与信息学竞赛数学基础》《GESP编程能力等级认证一本通(C 一级)》《图论算法理论、实现及应用》等多部著作;主持省部级教学研究项目5项,建设重庆市一流课程一门,以第一作者发表教学研究论文近20篇、科学研究论文30余篇(含SCI论文9篇、EI论文10篇),主持省部级科研项目3项,参与国家级科研项目3项。兼任多所中小学信息学奥林匹克竞赛特聘教练。
周祖松
中学信息技术高级教师,全国信息学竞赛金牌指导教师,重庆市育才中学信息学竞赛总教练。
重庆市基础教育教研项目评审专家库成员,重庆市九龙坡区九龙名师、九龙坡区中小学信息技术名师工作室主持人。中国计算机学会中小学计算机教育研讨会副主席。
担任全国信息学竞赛指导教师培训讲师和冬令营授课讲师。
指导学生参加全国信息学决赛(NOI)有8人获金牌,7人进入国家集训队,2人获国际初中生信息学竞赛金牌。100多人获全国青少年信息学奥林匹克联赛(NOIP)一等奖。
万毅
中学一级教师,重庆第一中学校信息科技教师及信息学竞赛教练,重庆市沙坪坝区新秀骨干教师,全国青少年信息学奥林匹克竞赛指导教师,国培计划(2023)中西部骨干教师项目优秀学员。
陈胤戬
重庆市育才中学信息学竞赛教练,曾获得NOI2020金牌,多次参加ICPC和CCPC区域赛并全部获得金牌,2023年参加GPLT团体程序设计天梯赛并荣获个人登顶先锋。
目錄 :
目 录
第1章 基础算法1:枚举算法
1.1 枚举算法的思想及实现要点
1.2 案例1:积木
1.3 案例2:自我数
1.4 案例3:龙虎斗
第2章 基础算法2:模拟算法
2.1 模拟算法的思想及实现要点
2.2 笛卡儿坐标系和网格中的坐标系
2.3 案例1:醉酒的狱卒
2.4 案例2:扫雷游戏
2.5 案例3:螺旋矩阵
第3章 基础算法3:递推和递归
3.1 递推和递归
3.2 案例1:数的计算
3.3 案例2:整数划分问题
3.4 案例3:三角形的个数
3.5 函数及递归函数设计
第4章 基础算法4:贪心算法
4.1 贪心算法的思想
4.2 案例1:活动安排问题
4.3 贪心算法的基本要素
4.4 0-1背包问题和部分背包问题
4.5 案例2:公路
4.6 案例3:纪念品分组
第5章 基础算法5:分治法
5.1 分治法的思想
5.2 案例1:棋盘覆盖问题
5.3 案例2:幂次方
5.4 案例3:分形
第6章 基础算法6:二分法及应用
6.1 二分法
6.2 二分查找
6.3 二分答案
6.4 C 中的二分查找函数
6.5 案例1:复合单词
6.6 案例2:垦田计划
6.7 案例3:跳石头
第7章 进制的思想及进制转换
7.1 数位和计数单位
7.2 进制及进制转换
7.3 实现进制转换的库函数
7.4 标准模板库中的位组(bitset)
7.5 案例1:统计好数
7.6 案例2:优秀的拆分
7.7 案例3:回文数
第8章 位运算及应用
8.1 位运算
8.2 位运算的应用
8.3 案例1:关灯游戏
8.4 案例2:格雷码
8.5 案例3:动物园
第9章 编码问题及处理
9.1 从ASCII编码说起
9.2 字符编码问题
9.3 案例1:圆括号编码
9.4 案例2:莫尔斯电码
9.5 案例3:Vigenère密码
第10章 数列问题及处理
10.1 数列及相关问题
10.2 等差数列和等比数列
10.3 案例1:数列1, 1, 2, 1, 2, 3
10.4 案例2:中位数数列
10.5 案例3:数列
第11章 高精度1:高精度计算的基本原理
11.1 高精度数
11.2 用字符型数组或整型数组实现算术运算
11.3 高精度计算原理
11.4 高精度计算要点
11.5 案例1:统计加法运算的进位次数
11.6 案例2:skew二进制
11.7 案例3:双塔问题
第12章 高精度2:高精度数加减法和乘法
12.1 高精度数的加减法和乘法
12.2 高精度运算的压位处理
12.3 案例1:高精度数的加法
12.4 案例2:高精度数的乘法
12.5 案例3:麦森数
第13章 字符及字符串处理(1)
13.1 字符串处理函数
13.2 字符串类string
13.3 字符转换
13.4 案例1:ISBN
13.5 案例2:解密
13.6 案例3:打字纠错
第14章 字符及字符串处理(2)
14.1 回文字符串
14.2 案例1:构造回文
14.3 案例2:镜像回文
14.4 案例3:回文日期
第15章 字符及字符串处理(3)
15.1 子串与子序列的处理
15.2 案例1:字符串包含问题
15.3 案例2:字符串的幂
15.4 案例3:统计单词数
第16章 时间和日期的处理
16.1 时间和日期处理的相关问题
16.2 案例1:相隔天数
16.3 案例2:黑色星期五
16.4 案例3:儒略日
第17章 数据结构1:数组和向量
17.1 数据结构基本概念
17.2 标准模板库
17.3 向量
17.4 案例1:明明的随机数
17.5 案例2:中位数
17.6 案例3:公交换乘
第18章 数据结构2:栈
18.1 栈
18.2 n个元素有多少种出栈顺序
18.3 案例1:括号串匹配
18.4 案例2:奇特的火车站
18.5 案例3:表达式求值
第19章 数据结构3:队列
19.1 队列
19.2 案例1:约瑟夫环问题
19.3 案例2:海港
19.4 案例3:等待时间
第20章 数据结构4:集合
20.1 数学上的集合
20.2 STL中的集合
20.3 案例1:第N个回文数
20.4 案例2:集合的递归定义
20.5 案例3:考勤刷卡
第21章 数据结构5:用数组模拟链表
21.1 数据结构的物理顺序和逻辑顺序
21.2 线性数据结构和非线性数据结构
21.3 顺序结构和链式结构
21.4 线性表:顺序表和链表
21.5 案例1:链表结点的物理/逻辑顺序
21.6 用数组模拟链表
21.7 案例2:好友关系
21.8 案例3:队列安排
第22章 数据结构6:树的概念及存储
22.1 非线性数据结构——树
22.2 图结构和树结构
22.3 二叉树
22.4 树和二叉树的存储
22.5 二叉树的遍历
22.6 案例1:二叉树深度
22.7 案例2:新二叉树
22.8 案例3:FBI树
第23章 排序及排序函数的使用
23.1 排序及排序算法
23.2 排序的应用
23.3 排序函数sort的用法
23.4 案例1:快乐的蠕虫
23.5 案例2:英文姓名排序
23.6 案例3:图书馆管理员
第24章 排序算法原理及应用
24.1 归并排序算法
24.2 快速排序算法
24.3 案例1:求逆序对问题
24.4 案例2:Freda的越野跑
24.5 案例3:求第k小的数
第25章 搜索1:深度优先搜索
25.1 深度优先搜索的思想
25.2 案例1:油田
25.3 案例2:最大的泡泡串
25.4 案例3:选数
25.5 深度优先搜索技巧
第26章 搜索2:广度优先搜索
26.1 广度优先搜索的思想
26.2 案例1:马走日
26.3 案例2:电影系列之《预见未来》
26.4 案例3:回家
第27章 搜索3:搜索的剪枝优化
27.1 搜索的剪枝优化
27.2 案例1:骨头的诱惑
27.3 案例2:小木棍
27.4 案例3:棋盘
第28章 DP1:动态规划的基本思路
28.1 动态规划算法的引入——从数字网格说起
28.2 动态规划算法的思想
28.3 动态规划算法的4个要素
28.4 案例1:数字网格
28.5 动态规划算法的变形——备忘录方法
28.6 案例2:单调回文分解
28.7 案例3:最大子段和
第29章 DP2:一维和二维动态规划
29.1 一维和二维动态规划
29.2 案例1:积木画
29.3 案例2:最大的子矩阵和
29.4 案例3:最大正方形的边长
第30章 DP3:背包类型动态规划
30.1 背包问题及求解算法
30.2 案例1:0-1背包问题
30.3 案例2:比谁猜得准
30.4 案例3:砝码称重
第31章 数论1:整除理论及应用
31.1 自然数与整数
31.2 整除
31.3 筛选法求质数
31.4 哥德巴赫猜想
31.5 案例1:半质数
31.6 案例2:筛选法求质数
31.7 案例3:哥德巴赫猜想
第32章 数论2:最大公约数理论及应用
32.1 最大公约数、互质、最小公倍数
32.2 带余数除法与辗转相除法
32.3 最大公约数理论
32.4 案例1:等差数列
32.5 案例2:最大公约数和最小公倍数
32.6 格点问题
32.7 案例3:兔八哥与猎人
第33章 数论3:唯一分解定理及应用
33.1 唯一分解定理
33.2 符号[x],n!的分解式
33.3 案例1:求标准质因数分解式
33.4 案例2:正除数个数和正除数的和
33.5 案例3:n!的标准质因数分解式
第34章 数论4:同余理论及应用
34.1 同余
34.2 a对模m的逆
34.3 同余类(剩余类)
34.4 同余方程
34.5 中国剩余定理
34.6 案例1:各位数字全为1的数
34.7 案例2:Niven数
34.8 案例3:韩信点兵
第35章 组合数学1:加法原理和乘法原理
35.1 加法原理和乘法原理
35.2 排列和组合公式
35.3 全排列及排列的字典序
35.4 生成序列全排列的函数
35.5 案例1:网格路径
35.6 案例2:产生数
35.7 案例3:过河卒
第36章 组合数学2:用DFS求解排列组合问题
36.1 用DFS求解排列组合问题
36.2 案例1:质数环问题
36.3 案例2:方形硬币
36.4 案例3:正方形
第37章 图论1:图的基本概念和图的存储
37.1 哥尼斯堡七桥问题
37.2 小世界理论
37.3 图的基本概念
37.4 图的存储表示
37.5 案例1:求顶点度数
37.6 编程解题时灵活地存储图
37.7 用向量数组实现邻接表并求顶点度数
37.8 案例2:道路网络
37.9 案例3:共同好友数
第38章 图论2:图的深度优先搜索
38.1 图的深度优先搜索
38.2 图的深度优先搜索的实现
38.3 案例1:红与黑
38.4 案例2:七段码数码管
38.5 用向量数组实现加权图的邻接表
38.6 案例3:道路修建
第39章 图论3:图的广度优先搜索
39.1 图的广度优先搜索
39.2 图的广度优先搜索的实现
39.3 案例1:奇怪的电梯
39.4 案例2:迷宫
39.5 案例3:医院选址问题
第40章 图论4:DAG和拓扑排序
40.1 AOV网络和拓扑排序
40.2 拓扑排序算法
40.3 案例1:拓扑排序实现
40.4 关于拓扑排序的进一步说明
40.5 案例2:将所有元素排序
40.6 案例3:最大食物链计数
附录A 标识符命名规范与代码规范
附录B 课程资源使用说明
参考文献
內容試閱 :
前 言
一、信息学竞赛的历史及发展
1984年2月16日,邓小平同志在参观上海市微电子技术及其应用汇报展览时指出:“计算机的普及要从娃娃做起”。根据这一指示精神,中国科学技术协会提议中国计算机学会(China Computer Federation,CCF)举办一个面向青少年的程序设计竞赛。CCF接受提议,将竞赛命名为“全国青少年计算机程序设计竞赛”,并于1984年成功举办首届竞赛,参加人数超过8000人。
1987年10月,一位名叫圣多夫(Sendov)的保加利亚教授给联合国教育、科学及文化组织(United Nations Educational,Scientific and Cultural Organization,UNESCO)写信,建议创建面向青少年的国际计算机奥林匹克竞赛(International Olympiad in Informatics,IOI)。他的建议获得了采纳,国际计算机奥林匹克竞赛于1989年创建,第一届竞赛就在保加利亚举行。由于举办国是欧洲的非英语国家,“计算”一词在当地语言中是“informatica”,于是竞赛名称中的“计算机”写作“informatics”,这就是IOI的由来。当时国内不知道在欧洲“informatica”是计算(机)的意思,于是把这个词翻译为“信息学”。为了和国际竞赛名称保持一致,国内的“全国青少年计算机程序设计竞赛”更名为“全国青少年信息学奥林匹克竞赛”(National
Olympiad in Informatics,NOI)。
这类竞赛虽然名为“信息学竞赛”,但其竞赛形式本质上是算法编程竞赛——选手需要通过设计算法、编写程序来解决具有实际背景的计算问题,评测时以测试数据验证程序的正确性和效率,并严格限制程序的运行时间和内存空间。
为了扩大信息学竞赛的普及范围,1995年,CCF创办了全国青少年信息学奥林匹克联赛(National Olympiad in Informatics in Provinces,NOIP)。2019年,CCF进一步推出非专业级软件能力认证(Certified Software Professional Junior/Senior,CSP-J/S)考试。2024年9月,全国参加第6次CSP-J/S认证考试的中小学生人数已突破20万。
2023年3月,CCF推出了编程能力等级认证(Grade Examination of Software Programming,GESP),包括图形化编程(Scratch)、Python编程及C 编程,每年3月、6月、9月、12月各组织一次等级认证。
除了CCF组织的NOI系列赛事和GESP等级认证外,中国电子学会推出了全国青少年信息素养大赛和青少年等级考试,中国人工智能学会推出了全国中小学信息技术创新与实践大赛,工业和信息化部人才交流中心推出了蓝桥杯全国软件和信息技术专业人才大赛(青少年组),等等。这些大赛的部分赛道和等级考试的部分项目也是信息学竞赛形式。
二、关于本系列教材及本书
尽管NOI系列竞赛开展了多年,但竞赛涉及的知识体系及其边界长期依赖命题专家的经验判断。为了建立标准化教学框架,2021年4月,CCF首次发布了《全国青少年信息学奥林匹克系列竞赛大纲》(以下简称《大纲》);此后,CCF分别于2023年3月和2025年4月对《大纲》进行了两次修订。大纲把所有涉及的知识点按难度等级分为入门级、提高级和NOI级。
目前市面上急需的是适合大部分学生从入门到进阶的信息学竞赛书籍,本书作者根据《大纲》要求,剔除了NOI级大部分太难的知识点,对剩下的知识点,根据难度等级和内在联系,编写了《信息学竞赛教程》系列教材,包括:初级篇、中级篇、高级篇。每本书包含40章,其中初级篇包含了《大纲》入门级大部分知识点,中级篇包含了《大纲》入门级剩余知识点和提高级部分知识点,高级篇包含了《大纲》提高级剩余知识点和NOI级个别知识点。
本书是初级篇,面向学完了C 语言、要进入算法阶段的中小学生,主要覆盖信息学竞赛的大部分基础算法和常用数据结构,包括基础算法专题、进制转换、位运算、编码问题、数列问题、高精度专题、字符串处理、时间和日期处理、数据结构专题、排序专题、搜索专题、动态规划专题、数论专题、组合数学专题、图论专题等内容。
限于篇幅,本书每章只收录了3个案例,部分案例对初学者来说比较难。为了帮助初学者较好地掌握本书内容,我们在配套资源的每一章都设计了一些预习题和入门题,也安排了一些课后习题。
根据中小学生的编码习惯,本书对变量名、函数名这些标识符的命名以及代码编写,制定了详细规范,详见附录A。
本书配套资源丰富,包括题库、课件、笔记、授课视频等,关于本书配套资源的使用方法,详见附录B。
三、预备知识
由于目前CCF的NOI系列大赛只支持C 语言,本系列教材并没有包含C 语言的基础知识,所以在使用本系列教材之前,读者应该先掌握C 语言。初学者可以用本书作者编写的《C 趣味编程及算法入门》来学习C 语言,这是专门为中小学生编写的一本C 编程及算法入门教材。
对中小学生读者,建议先通过中国电子学会青少年等级考试(C语言)二级或GESP二级考试再来学习本系列教材。