如下的 C++ 代码执行时输入 12 将输出如下数字图形。注意:最后一行之前没有空格。横线处应填入的代 码是( )。
0
12
345
6789
01234
567890
1234567
89012345
678901234
5678901234
56789012345
678901234567
int line, i, j, k;
i = 0;cout << "请输入行数:";
cin >> line;
for (j = 0; j < line; j++) {
for (k = 0; k < ___________; k++) // L1
cout << " ";
for (k = 0; k < j + 1; k++) {
cout << i;
i += 1;
if (i >= 10)
i = 0;
}
cout << endl;
}这题核心是理解"倒三角"的空白规律。观察图形:第一行 0 个空格,第二行 1 个空格,第 j 行 j-1 个空格。总数字个数是 line×(line+1)/2(等差数列求和),第 0 到 j 行已输出 (j+1)(j+2)/2 个数字。剩余数字数 = 总数 − 已输出 = line×(line+1)/2 − (j+1)(j+2)/2 = line − j − 1,正好是第 j 行前面该填的空格数。
B 项 line−j 会多一个空格(j=0 时第一行错成 1 个空格);C 项 line 恒定给满格,图形完全错位;D 项更离谱。学生容易只盯住"每行 j+1 个数字"而忽略空白数与已输出数字的减法关系,或者误以为空格数就等于当前行号 j。
这题核心是理解"倒三角"的空白规律。观察图形:第一行 0 个空格,第二行 1 个空格,第 j 行 j-1 个空格。总数字个数是 line×(line+1)/2(等差数列求和),第 0 到 j 行已输出 (j+1)(j+2)/2 个数字。剩余数字数 = 总数 − 已输出 = line×(line+1)/2 − (j+1)(j+2)/2 = line − j − 1,正好是第 j 行前面该填的空格数。
B 项 line−j 会多一个空格(j=0 时第一行错成 1 个空格);C 项 line 恒定给满格,图形完全错位;D 项更离谱。学生容易只盯住"每行 j+1 个数字"而忽略空白数与已输出数字的减法关系,或者误以为空格数就等于当前行号 j。
本题卡在《GESP 考试大纲》二级"循环结构"与"数学推理"的交汇处。命题人专门设计此题,就是要筛掉只会套模板的选手——他们看到空格循环就条件反射填 line - j,却不会回头验证图形规律,更不会用数学减法算"空格数 = 总数字 − 已输出数字"。