Skip to content

2018年 408 数据结构 第 3 题

数据结构2018年选择题2分

题目

设有一个12×12的对称矩阵M,将其上三角部分的元素mi,j(1≤i≤j≤ 12)按行优先存入 C 语言的一维数组N中,元素m6,6在N中的下标是( )。

错因

B

下标和"序号"差 1。前 5 行已经放了 50 个元素,第 6 行第 1 个就是 ——它是第 51 个元素,但 C 语言数组下标从 0 开始,对应下标是 50。选 51 的人是把"第几个"当成了"下标几",没有把 1-based 序号转换到 0-based 下标。

C

把上三角的行长当成了"先 1 后多"——从第 1 行 1 个、第 2 行 2 个……第 6 行 6 个累加:,再在末尾加 4 行 8.5 个的某种凑数得 55;或者把"上三角"误存成了"下三角"按 算第 6 行第 6 列: 再补成 55。本质是把"上三角行优先"和"下三角行优先"两个公式混淆了:上三角第 行长度是 (递减),下三角第 行长度才是 (递增)。

D

整个上三角(不含对角线)的元素总数,根本不是某一个元素的下标。选 D 的人多半是看见"对称矩阵 12×12"就直接套公式,没注意题目问的是" 的下标"。

总解析

目标:把 () 按行优先压进一维数组 ,问 里的下标(C 语言下标从 0 开始)。

上三角行优先存储的关键:第 行存放 ,共 个元素。

。第 行的元素个数:

行 i123456
元素个数121110987

前 5 行总元素数

第 6 行的第一个元素恰好就是 (因为只存 的部分),所以它是数组中的第 51 个元素。C 语言下标从 0 计起,对应下标是:

也可以用通用公式 ,代入

最终答案是 A(50)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数