输入行数,约定 $1\leq \text{lineCount} \leq 9$,输出以下图形。应在 C++ 代码横线处填入( )。

int lineCount = 0;
cout << "请输入行数量:";
cin >> lineCount;
for (int i = 0; i < lineCount; i++) {
for (int j = 0; j < _________; j++) // 此处填写代码
cout << ' ';
for (int j = 1; j < i + 1; j++)
cout << j << " ";
for (int j = i + 1; j > 0; j--)
cout << j << " ";
cout << endl;
}拿到这种对称图形题,别急着套公式,先盯着最底行看:它没有空格!往上推,每行减1个,左右都要减,所以空格数是2倍关系,代入i=0验证一下就能锁定答案。
学生最容易掉进C选项的坑,觉得只补左边空格就行,或者误以为空格数等于剩余行数(lineCount-i),忘了左右都要空,导致图形严重左偏。还有的人会把循环条件写成<=,多输出一行空格,破坏对称性。
考点定位:本题出自GESP二级C++《语句、循环与数组》模块,核心考查嵌套循环的逻辑控制与对称图形的构造。命题人特意选在第14题,就是要检验学生是否真正理解了“对称”的数学含义在代码中的转化,而不是死记硬背模板。
解题思维: 观察图形结构,第i行(i从0开始)由三部分组成:左侧空格、数字序列、右侧空格。数字序列是"1 2 ... i+1 ... 2 1",长度固定为2(i+1)-1=2i+1。由于图形左右对称,左右空格数量必须相等。
关键观察点在最底行:当i=lineCount-1时,图形没有左侧空格。向上推,每行减少1个空格。因此左侧空格数 = lineCount - 1 - i。将左右空格合并,总空格数 = 2 × (lineCount - 1 - i) = (lineCount - i - 1) × 2。
代入验证: 假设lineCount=5,第一行i=0,空格数应该是(5-0-1)*2=8。代码中j从0开始,循环条件j < 8,正好输出8个空格,符合图形。如果选B,空格数=(5-0)*2=10,多2个,图形向右偏移且不对称;如果选C,空格数=5-0-1=4,只补了左边,右边没空,图形严重左偏。
陷阱拆解: 选项B错误:(lineCount - i) × 2 会导致每行多2个空格,图形向右偏移且不对称。 选项C错误:lineCount - i - 1 仅计算了左侧空格,右侧缺失,图形严重左偏。 选项D错误:lineCount - i 同样未乘以2,左右空格数量不一致,破坏对称性。 最阴险的是C选项——它恰好是A选项的一半,利用"学生可能误以为只需左侧空格"的心理陷阱。
反命题思维: 若将空格改为(lineCount - i - 1),图形会左对齐成直角三角形;若改为(lineCount - i) × 2,会变成向右倾斜的锯齿状。改这道题的i循环为j < lineCount - i - 1,答案就会变成D。刷到对称图形题先问:左右是否对称?空格系数是否为2×?
考频与趋势: 从题库数据看,"运算符与表达式"类题目共考过261题,覆盖9个考试级别(2007-2026);逐年分布:2007年4题、2008年1题、2009年4题、2010年5题、2014年1题、2019年3题、2020年2题、2021年1题、2022年1题、2023年91题、2024年41题、2025年61题、2026年14题、null年32题;分赛事:GESP一级72题、GESP二级70题、GESP三级47题、GESP四级37题、CSP入门级12题、NOIP普及组初赛9题、CSP提高级7题、NOIP提高组初赛6题、GESP五级1题。
其中GESP二级占比约27%,且2023年该类题目爆发式增长(91题),2024-2025年虽略有回落但仍保持高位(41题、61题),说明命题人对基础循环逻辑与表达式计算的掌握要求依然严苛,不会因题目简单而降低考察深度。
预测: 基于给定数据与经验,未来GESP二级及三级考试中,类似“对称图形空格计算”的题目仍会高频出现,但可能会在循环条件中增加一层嵌套(如同时控制空格和数字的打印逻辑),或者改变循环变量的起始值来增加干扰项。暂无足够依据预测具体年份的考题形式,但掌握"空格数=2×(剩余行数)"这一核心规律是应对此类题目的基石。