Skip to content

2020年 408 数据结构 第 1 题

数据结构2020年选择题2分

题目

将一个 对称矩阵 的上三角部分的元素 ),按列优先存入 C 语言的一维数组 中,元素 中的下标是( )。

错因

A

按"行优先存上三角"算的下标。误以为题目是行优先,套了 1-based 行优先公式 )。问题在于把 "列优先" 看成 "行优先",存储顺序整个搞反。

B

同样是按"行优先存上三角"算,但下标从 1 开始:。比 A 又多偏 1,错因相同——没注意题面明确写的是"列优先",C 语言数组下标必须从 0 算起。

D

公式对了(列优先存上三角:前 列共 个元素,再加列内偏移),但下标从 1 开始:。C 语言数组下标从 0 开始,应再减 1。

总解析

第一步:用对称性把元素挪到上三角。

题目要求 才存进 ,而 的行号 大于列号 ,落在下三角。利用对称矩阵的性质

所以实际查的是 这个上三角元素的下标。

第二步:列优先下标公式。

按列优先存上三角,第 列含 个元素()。元素 之前已经存了:

  • 列: 个元素;
  • 列内 之前: 个元素。

C 语言数组下标从 0 开始,所以:

第三步:代入

最终答案是 C(22)

易错点:① 忘了用对称性把 转成 ;② "列优先"还是"行优先"看错;③ 下标 1-based 还是 0-based 弄错(C 语言一定是 0-based)。

最后更新:

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

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