从一维数组的线性存储到多维数组的矩阵运算,从前缀和差分优化到与动态规划的深度结合,数组早已超越了“变量集合”的朴素定义,成为解决复杂问题的关键工具。
猜你喜欢:各省市2026年NOI省队名单汇总
福利资料:为协助信息学竞赛生高效备考,特整理《2014-2025年信息学竞赛试题及答案》pdf资料
2026年NOI大纲解读七:数组全攻略
一、 知识点概览:考什么?
根据《全国青少年信息学奥林匹克系列竞赛大纲(2025年修订版)》,2.1.2 C++ 程序设计的第七部分是数组。数组是处理批量数据的核心工具,也是后续学习动态规划、搜索等高级算法的数据载体。
1. 数组与数组下标
定义:数组是一组相同类型数据的集合,在内存中连续存储。
下标(Index):C++ 数组的下标从0开始。例如定义int a,有效的下标范围是0到9。
访问:通过数组名[下标]的方式访问具体元素,如a。
2. 数组的读入与输出
操作:通常配合循环结构(for循环)来实现数组的批量输入和输出。
3. 二维数组与多维数组
概念:类似于数学中的矩阵或表格。定义方式为类型 数组名[行数][列数]。
存储:在 C++ 内存中,二维数组是按行连续存储的。
二、 常见考点与易错点分析
数组看似简单,但在实际竞赛(CSP-J/S)中,因数组操作不当导致的“爆零”屡见不鲜:
1. 下标越界(Runtime Error)
陷阱:定义int a,却尝试访问a。
后果:轻则结果错误,重则导致程序崩溃(RE)。建议在定义数组时,比题目要求的范围稍大一些(如题目要求 ,则定义a)。
2. 数组初始化与随机值
局部变量:在函数内部(包括main函数)定义的数组,若未手动初始化,其内部元素的值是随机的(Garbage Value)。
全局变量:在函数外部定义的全局数组,编译器会自动将其所有元素初始化为0。
建议:竞赛中建议将较大数组定义为全局变量,既避免了栈溢出,又自动清零。
3. 内存空间计算
考点:初赛常考数组占用的字节数计算。公式:总字节 = 元素个数 × 单个元素大小。
示例:int a占用的空间为 字节 KB。
三、 C++示例代码:数组应用演示
以下代码展示了如何使用一维数组处理数据反转,以及二维数组处理矩阵逻辑。

四、 典型真题解析
例题 1:下标范围(模拟初赛真题)

【解答】
A:下标不能为负(虽然指针运算可能不报错,但逻辑非法)。
B:a越界,最大下标为 9。
D:下标必须是整数。
C:0到9是合法范围。答案:C
例题 2:内存计算(源自 GitHub 历年真题库)

【解答】long long类型通常占用 8 个字节。 总大小 = 。 换算为 KB:。答案:C
五、 结构化梳理:知识思维导图

推荐阅读:




























