531 字
3 分钟
GESP 2026年C++二级编程题解析

202603-1 数数#

题目描述

给定一个数,如果数中恰好存在3个2,则被称为美丽的数字。

现给定两个数 a,ba, b,其中 (a<ba < b),请输出它们之间(含端点)存在多少个美丽的数。

输入格式

输入一行两个整数 a,ba, b

输出格式

输出一个整数,表示 aabb 之间美丽的数有多少个。

样例输入

2221 2223

样例输出

2

数据范围

0a,b1060 \le a, b \le 10^6

代码解析

这道题是一道典型的数位剥离问题,我们可以用一个循环去遍历 aabb 之间的所有数,对于每个数,我们用一个循环去遍历它的每一位,统计其中 2 的个数,若个数为 3 则答案加一,注意不要直接用 i 去剥离,循环结束后 i 变成 0,导致死循环。

#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, ans = 0;
cin >> a >> b;
for (int i = a; i <= b; i++) {
int cnt = 0;
int j = i;
while (j != 0) {
if (j % 10 == 2) cnt++;
j /= 10;
}
if (cnt == 3) ans++;
}
cout << ans;
return 0;
}

202603-2 画画#

题目描述

给你一个单整数 nn,请输出一个 nnnn 列的方阵。方阵的四个顶点是 +,第一行和第 nn 行的非顶点位置是 -,第 1 列和第 nn 列非顶点位置是 |,中间位置是 *

输入格式

输入一个单整数 nn

输出格式

nnnn 列的方阵。

样例输入

5

样例输出

+---+
|***|
|***|
|***|
+---+

数据范围

n108n \le 10^8

代码解析

一道二级常考的画图问题,注意观察矩形中各种符号的规律即可,第一行和最后一行是 +-,其他行是 |*,分开处理即可。

#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
if (i == 1 || i == n) {
if (j == 1 || j == n) cout << '+';
else cout << '-';
} else {
if (j == 1 || j == n) cout << '|';
else cout << '*';
}
cout << endl;
}
return 0;
}
GESP 2026年C++二级编程题解析
https://yezi.press/posts/gesp/gesp-cpp2-2026/
作者
Yezi 叶子
发布于
2026/03/14
许可协议
CC BY-NC-SA 4.0