新書推薦:

《
威尔·杜兰特:最伟大的思想
》
售價:NT$
245

《
日本装帧110年系谱
》
售價:NT$
806

《
厨房药房:用香料和药草疗愈身心
》
售價:NT$
254

《
稳富:悄悄存钱,稳稳变富
》
售價:NT$
296

《
神圣罗马帝国
》
售價:NT$
653

《
优势累积:给中国家庭的松弛父母课
》
售價:NT$
300

《
汗青堂丛书163·狄仁杰与武则天:武周革命与平民官僚的崛起
》
售價:NT$
449

《
历史、神话与艺术:东西方文化的解读和比较
》
售價:NT$
347
|
| 編輯推薦: |
· 练真题:精选114道信息学奥赛经典习题,提供完整代码、重点知识及习题视频讲解。 · 攻难点:深入突破排序、递推、递归、搜索与回溯、高精度、贪心、分治、广度优先搜索等核心算法难点。 · 悟方法: 不止于AC,更注重解题思维的培养与算法思想的融会贯通。 · 通关易: 系统规划,助力零基础学习者稳步通关C++与算法,直达CSP-J认证要求。
|
| 內容簡介: |
全书分为两部分,共16章。第一部分(第1章~第7章)为C++语言基础,主要内容包括编程环境搭建、C++编程基础知识、数组、函数、编译预处理、结构体、数据交互、进制转换与位运算。第二部分(第8章~第16章)以算法刷题为主,涵盖8类常见算法题型,包括排序算法、递推算法、递归算法、搜索与回溯算法、高精度算法、贪心算法、分治算法、广度优先搜索算法。全书共解析信息学奥赛中114道经典例题。 本书适合信息学奥赛学习者自学或备考刷题使用,也可作为CSP-J认证考试的培训参考教材。
|
| 關於作者: |
|
王健伟,毕业于哈尔滨工程大学计算机及应用专业。拥有超过20年软件开发经验,主导或参与过数十个实战项目,技术领域涵盖网络通信、网络安全、网络游戏。曾联合创办知名网络安全公司——安络科技有限公司,并担任中国首套网络安全在线扫描评估系统的项目负责人,以及全球同服独立游戏《冒险之路》的制作人。近八年来,致力于编程教育,迄今已累计培养学员、读者数万名,遍布全球,其中众多学员已就职于国内外顶尖科技公司。
|
| 目錄:
|
目录 第一部分 C++语言基础 第1章 C++语言编程环境选择与搭建 1.1 信息学奥赛环境说明 1.2 使用Visual Studio搭建C++编程环境 1.3 在Visual Studio中创建可运行的C++程序 1.4 使用Dev-C++搭建C++编程环境说明 1.5 在Dev-C++中创建能运行的C++程序 1.6 总结 第2章 C++编程基础知识 2.1 编写代码的基本规则 2.2 数据类型和存储空间 2.3 常量和变量 2.4 字符数据 2.5 字符串和字符的区别 2.6 变量初始化与数值型数据间的混合运算 2.7 认识一下算术运算符 2.8 强制类型转换 2.9 自增和自减运算符 2.10 赋值运算符与初始化 2.11 逗号运算符和逗号表达式 2.12 语句的分类 2.13 程序的基本结构 2.14 关系运算符和关系表达式 2.15 逻辑运算符和逻辑表达式 2.16 if选择结构语句的三种形式 2.17 if语句的嵌套使用 2.18 条件运算符和switch语句 2.19 当型循环和直到型循环语句 2.20 for循环语句与while循环语句的区别 2.21 循环嵌套与控制结构 第3章 数组 3.1 用一维数组解决多变量定义问题 3.2 二维数组和一维数组的区别 3.3 字符数组的定义和初始化 3.4 字符串和字符串结束标记 3.5 字符数组的输出和字符串处理函数 第4章 函数 4.1 函数的概念和用途 4.2 函数的定义和返回值问题 4.3 函数调用与函数声明 4.4 函数调用是否可以嵌套 4.5 函数的递归调用 4.6 递归调用的出口 4.7 局部变量和全局变量 第5章 编译预处理 5.1 宏定义 5.2 文件包含 第6章 结构体 6.1 结构体简介 6.2 定义结构体类型变量 6.3 结构体类型变量的使用 第7章 数据交互、进制转换与位运算 7.1 输入输出函数:scanf、cout、cin 7.2 命名空间 7.3 string类型 7.4 进制之间的转换 7.5 位运算 第二部分 算法刷题 第8章 数据结构与算法效率分析 8.1 基本概念、算法效率度量与大O表示法 8.2 算法时间复杂度计算规则 8.3 常见算法时间复杂度分析 8.4 算法的空间复杂度分析 第9章 排序算法 9.1 排序的基本概念 9.2 冒泡排序的理论详解 9.3 1176:谁考了第k名 9.4 1177:奇数单增序列 9.5 1178:成绩排序 9.6 1179:奖学金 9.7 1180:分数线划定 9.8 1181:整数奇偶排序 9.9 1182:合影效果 9.10 1183:病人排队 9.11 计数排序的理论详解 9.12 1184:明明的随机数 9.13 1185:单词排序 9.14 1186:出现次数超过一半的数 9.15 1187:统计字符数 9.16 1310:车厢重组 第10章 递推算法 10.1 同余定理 10.2 1188:斐波那契数列(2) 10.3 1189:Pell数列 10.4 1190:上台阶 10.5 1191:流感传染 10.6 1192:放苹果 10.7 1193:吃糖果 10.8 1194:移动路线 10.9 取余还是取模 10.10 1195:判断整除 10.11 1196:踩方格 10.12 兔子繁殖问题的正推与逆推 10.13 1312:昆虫繁殖 10.14 1313:位数问题 10.15 1314:过河卒(NOIP 2002) 第11章 递归算法 11.1 栈的概念 11.2 中缀、后缀、前缀表达式 11.3 1198:前缀表达式 11.4 1199:全排列 11.5 1200:分解因数 11.6 1201:斐波那契数列 11.7 1202:Pell数列 11.8 1203:括号匹配问题 11.9 1204:爬楼梯 11.10 1205:汉诺塔问题 11.11 1206:放苹果 11.12 1207:求最大公约数问题 11.13 1208:2的幂次方表示 11.14 1209:分数求和 11.15 1210:因子分解 11.16 1211:判断元素是否存在 11.17 1315:集合的划分 11.18 1316:数的计数(NOIP 2001) 第12章 搜索与回溯算法 12.1 1212:LETTERS 12.2 1213:八皇后问题 12.3 1214:八皇后 12.4 1215:迷宫 12.5 1216:红与黑 12.6 1217:棋盘问题 12.7 1218:取石子游戏 12.8 1219:马走日 12.9 1220:单词接龙 12.10 1221:分成互质组 12.11 1222:放苹果 12.12 排列与组合 12.13 1317:组合的输出 12.14 1318:自然数的拆分 12.15 2110:素数环 第13章 高精度算法 13.1 1168:大整数加法 13.2 1169:大整数减法 13.3 1170:计算2的N次方 13.4 1171:大整数的因子 13.5 1172:求10000以内n的阶乘 13.6 1173:阶乘和 13.7 1174:大整数乘法 13.8 1175:除以13 13.9 1307:高精度乘法 13.10 1308:高精度除法 13.11 1309:回文数(NOIP 1999) 第14章 贪心算法 14.1 1223:An Easy Problem 14.2 1224:最大子矩阵 14.3 1225:金银岛 14.4 1226:装箱问题 14.5 1227:Ride to Office 14.6 1228:书架 14.7 1229:电池的寿命 14.8 1230:寻找平面上的极大点 14.9 1231:最小新整数 14.10 1232:Crossing River 14.11 1233:接水问题 14.12 1319:排队接水 14.13 1320:均分纸牌(NOIP 2002) 14.14 1321:删数问题(NOIP 1994) 14.15 1322:拦截导弹问题(NOIP 1999) 14.16 1323:活动选择 14.17 1324:整数区间 第15章 分治算法 15.1 快速幂 15.2 1234:2011 15.3 快速排序 15.4 1235:输出前k大的数 15.5 1236:区间合并 15.6 归并排序 15.7 1237:求排列的逆序数 15.8 1238:一元三次方程求解 15.9 1239:统计数字 15.10 1240:查找最接近的元素 15.11 1241:二分法求函数的零点 15.12 1242:网线主管 15.13 1243:月度开销 15.14 1244:和为给定数 15.15 1245:不重复地输出数 15.16 1246:膨胀的木棍 15.17 1247:河中跳房子 15.18 1325:循环比赛日程表 15.19 1326:取余运算(mod) 15.20 1327:黑白棋子的移动 15.21 1328:光荣的梦想 第16章 广度优先搜索算法 16.1 队列的概念 16.2 1248:Dungeon Master 16.3 1249:Lake Counting 16.4 1250:The Castle 16.5 1251:仙岛求药 16.6 1252:走迷宫 16.7 1253:抓住那头牛 16.8 1254:走出迷宫 16.9 1255:迷宫问题 16.10 1256:献给阿尔吉侬的花束 16.11 1257:Knight Moves 16.12 1329:细胞 16.13 1330:最少步数
|
| 內容試閱:
|
前 言 全国青少年信息学奥林匹克竞赛(National Olympiad in Informatics,NOI),简称信息学奥赛,是一项面向全国青少年的计算机编程竞赛,旨在选拔和培养在信息学领域具有突出能力的学生。 信息学奥赛适合小学到高中阶段的在校学生参与。开始学习信息学奥赛的适宜年龄通常在小学四年级到初中二年级之间。 信息学奥赛在青少年编程比赛中的含金量非常高。如果能在信息学奥赛中取得优异成绩,这将成为学生成长过程中的重要成就。这不仅有助于学生在中考、高考择校时享受优惠政策,甚至能为未来的职业发展带来积极影响——许多用人单位高度重视学生在信息学奥赛中获得的成绩。 信息学奥赛主要考查以下三方面的知识。 (1)重点考查计算机科学中“算法和数据结构”领域的知识。 (2)涉及小学到高中乃至大学阶段的相关数学知识。 (3)考查少部分基础且常用的C++编程语言知识。 总体而言,信息学奥赛主要考查编程算法与数据结构相关知识。若按专业划分,通常归属于计算机科学与技术、软件工程等计算机相关专业领域。 需要注意的是,虽然青少年编程和商业软件编程都属于编程范畴,但它们存在显著区别。 商业软件编程属于计算机行业。从商业软件编程的角度看,计算机行业是一个广泛且复杂的领域,涵盖了很多分支方向,而且知识更新速度非常快,每年都有大量的新技术出现,需要从业者不断学习。要在计算机行业立足,需要具备快速学习新知识的能力。 然而,青少年编程教育领域的知识体系相对稳定,需要学习和掌握的内容较为固定。 由于职业发展定位、前景和经济回报等因素,计算机行业从业者很少涉足青少年编程领域。同时,多数编程培训机构的教师和教练对计算机行业从业者的实际工作内容和职业状态也较为陌生。 借着本书的出版,笔者希望能够与青少年编程机构的教师、教练及各位学习编程的青少年朋友有更多的交流,携手共同学习,共同进步。 一直以来,很多家长都有一个疑问——我的孩子似乎没有编程天赋,很难在信息学奥赛中取得好成绩。这种认识是片面甚至错误的。要在信息学奥赛中取得好成绩,天赋并不是最重要的,起决定性作用的往往在于勤奋和坚持学习的决心和毅力。那些在信息学奥赛的考试中取得优异成绩的佼佼者,他们背后都投入了大量时间、挥洒了大量汗水。 信息学奥赛的学习切忌急功近利,不要妄想通过几个月的突击就能取得好成绩。作为竞赛级别的考试,信息学奥赛的难度自然是不小的。因此,正确的学习态度是将其作为一门文化课来对待,做好打持久战的准备,投入的时间少则1~2年,多则3~5年,并且每天坚持至少学习1小时。如果能做到这一点,想要在信息学奥赛中取得好成绩并不困难。 目前,虽然教授信息学奥赛的教师和教练不少,但在教学过程中,许多人仍存在以下问题。 (1)先讲解大量理论(无论短期是否用得上),再让学生做少量练习题。 (2)让学生独自大量刷题,却极少讲解题目涉及的重点与难点,导致学生学习过程混沌。 (3)针对一道题目,给出多种解法和复杂编程技巧,忽视学生当前的基础与接受能力,反而增加困惑。 上述问题的成因,主要受限于教师或教练自身的专业能力与教学能力。许多教师讲课容易把学生讲糊涂。他们自己理解某个知识点,却往往不清楚学生容易在何处卡壳、为何难以理解知识点。 在本书中,笔者将采用“以练代讲、边练边讲”的方式撰写内容——全程通过刷题来推进知识的讲解。 当然,刷题并非让学生成为刷题机器。只有达到足够的刷题量,见识各种题型,才能开阔解题视野与思路。唯有如此,学生才能在面对信息学奥赛时从容应对。 毫不夸张地说,大量刷题是学习信息学奥赛最高效的方式之一。
|
|