GESP 二级 · GESP202609 C++ 二级 第 13 题

选择题 · 答案 A · 考点:数学、输入输出

← 整套速查表 GESP 二级 全部真题

题目

如下的 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;
}
答案:A

考点

数学输入输出

解题思维

这题核心是理解"倒三角"的空白规律。观察图形:第一行 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,却不会回头验证图形规律,更不会用数学减法算"空格数 = 总数字 − 已输出数字"。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断