GESP认证C++编程真题解析 | 202603 二级

编程题

B4497 数数

【题目来源】

洛谷:[B4497 GESP202603 二级] 数数 - 洛谷

【题目描述】

对于正整数 \(n\),如果 \(n\) 的所有数位中包含恰好 \(3\)\(2\),Alice 会认为这个正整数是美丽的。例如,正整数 \(24122\) 中包含 \(3\)\(2\),所以 \(24122\) 是美丽的;正整数 \(132\) 中包含 \(1\)\(2\),所以 \(132\) 不是美丽的;正整数 \(212322\) 中包含 \(4\)\(2\),所以 \(212322\) 不是美丽的。

Alice 想知道正整数 \(L\) 到正整数 \(R\)(包括 \(L\)\(R\))中有多少美丽的正整数,你能帮她数一数吗?

【输入】

输入共 \(2\) 行,第一行为正整数 \(L\),第二行为正整数 \(R\)

【输出】

输出一行,包含一个整数 \(C\),表示 \(L\)\(R\)\(C\) 美丽数的数量。

【输入样例】

2221
2223

【输出样例】

2

【算法标签】

《洛谷 B4497 数数》 #循环结构# #GESP# #2026#

【代码详解】

#include <bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;       // 使用标准命名空间

int l, r, ans;  // 定义三个整型变量:l(左边界), r(右边界), ans(结果计数器)

// 判断一个整数是否恰好包含3个数字2
bool check(int x)
{
    int res = 0;  // 计数器,记录数字2出现的次数
    
    // 逐位检查数字x的每一位
    while (x)
    {
        // 检查当前个位数是否为2
        if (x % 10 == 2)
        {
            res++;  // 如果是2,计数器加1
        }
        x /= 10;  // 去掉当前个位数,继续检查下一位
    }
    
    // 返回判断结果:数字2是否恰好出现3次
    return res == 3;
}

int main()  // 主函数入口
{
    cin >> l >> r;  // 输入区间范围[l, r]
    
    // 遍历区间[l, r]中的每一个整数
    for (int i = l; i <= r; i++)
    {
        // 检查当前数字i是否满足条件
        if (check(i))
        {
            ans++;  // 如果满足条件,计数器加1
        }
    }
    
    cout << ans << endl;  // 输出满足条件的数字个数
    return 0;  // 程序正常结束
}

【运行结果】

2221
2223
2

B4498 画画

【题目来源】

洛谷:[B4498 GESP202603 二级] 画画 - 洛谷

【题目描述】

输入一个正整数 \(n\),你需要绘制一个 \(n\)\(n\) 列的正方形,绘制规则如下:

  • 正方形的四个顶点使用 + 绘制;
  • 除顶点外,第 \(1\) 行与第 \(n\) 行使用 - 绘制;
  • 除顶点外,第 \(1\) 列与第 \(n\) 列使用 | 绘制;
  • 正方形内部使用 * 绘制。

【输入】

一行,一个正整数 \(n\)

【输出】

输出共 \(n\) 行,表示对应的正方形。

【输入样例】

5

【输出样例】

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

【算法标签】

《洛谷 B4498 画画》 #循环结构# #GESP# #2026#

【代码详解】

#include <bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;       // 使用标准命名空间

const int N = 105;  // 定义常量N,表示数组的最大尺寸
int n;              // 变量n,表示实际使用的尺寸
char a[N][N];       // 定义二维字符数组a,用于存储图案

int main()  // 主函数入口
{
    cin >> n;  // 输入n,表示图案的尺寸
    
    // 第一阶段:初始化整个数组为'*'
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            a[i][j] = '*';  // 将所有位置初始化为星号
        }
    }
    
    // 第二阶段:绘制边框
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            // 如果是第一行或最后一行,设置为'-'(横线)
            if (i == 1 || i == n)
            {
                a[i][j] = '-';
            }
            
            // 如果是第一列或最后一列,设置为'|'(竖线)
            if (j == 1 || j == n)
            {
                a[i][j] = '|';
            }
        }
    }
    
    // 第三阶段:设置四个角的字符为'+'
    a[1][1] = '+';      // 左上角
    a[1][n] = '+';      // 右上角
    a[n][1] = '+';      // 左下角
    a[n][n] = '+';      // 右下角
    
    // 第四阶段:输出整个图案
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cout << a[i][j];  // 输出当前位置的字符
        }
        cout << endl;  // 每输出完一行后换行
    }
    
    return 0;  // 程序正常结束
}

【运行结果】

5
+---+
|***|
|***|
|***|
+---+
posted @ 2026-03-18 14:37  团爸讲算法  阅读(50)  评论(0)    收藏  举报