OneCoder Avatar
OneCodercoderli.com · 955 篇博文
二级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【ASCII字符编码与画布坐标映射】GESP二级题解:luogu-B4576 [GESP202609 二级] 字符变换

📅 2026-09-15·✍️ OneCoder·计算中...·⏱️ 6 分钟
#GESP#C++#GESP二级#二维数组#ASCII#字符变换#真题#2026年9月#GESP202609

CCF GESP 2026年9月认证(第十五次认证)C++ 二级试题,洛谷 B4576。本题严格遵循 CCF GESP 官方大纲规范,重点考察ASCII字符编码与画布坐标映射。题目逻辑严密,模型典型,是深入理解与掌握信奥核心考点的经典范例。

B4576 [luogu-B4576 [GESP202609 二级] 字符变换]

🔗 洛谷原题传送门B4576

题目要求

题目描述

小明有一个 8×168 \times 16 的画布(8 行 16 列),画布中的格子从上到下从左到右编号,左上的编号为 1,第一排最后一个的编号为 16,最后一排第一个编号为 113,右下为 128。

初始画布中的每个格子都是 *,随后小明会给定三个正整数,小明会将对应编号的格子变为该正整数对应的 ASCII 编码字符。

最后请帮小明输出整个画布。

输入格式

输入包含三行,每行一个正整数,表示需要替换的画布格子编号。

输出格式

输出 8×168 \times 16 的画布。

输入输出样例

样例输入 #1
TEXT
48
65
97
样例输出 #1
TEXT
****************
****************
***************0
****************
A***************
****************
a***************
****************

说明/提示

输入范围是 48 到 57,65 到 90,以及 97 到 122(即 ASCII 编码的 '0''9', 'A''Z', 'a'~'z')。


题目分析与解题思路

  1. 二维网格一维编号映射:画布大小固定为 8×168 \times 16。一维编号 kk1k1281 \le k \le 128)转换为从 0 开始的行列下标公式为:
    • 行号:r=(k1)/16r = (k - 1) / 16
    • 列号:c=(k1)%16c = (k - 1) \% 16
  2. ASCII 类型强制转换:输入为正整数数值 kk,其对应的 ASCII 字符可以通过 (char)k 强制转换获得,例如 48048 \to '0', 65A65 \to 'A', 97a97 \to 'a'
  3. 二维数组填充与输出:初始将整个 char grid[8][16] 全部赋值为 '*',读取三个输入修改对应位置后双重循环输出。

完整参考代码 (C++11)

CPP
/**
 * Problem: luogu-B4576
 * Standard: C++11 (CCF GESP 官方大纲规范)
 * Author: OneCoder
 */

#include <iostream>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // 初始化 8 行 16 列画布,默认填充 '*'
    char grid[8][16];
    for (int r = 0; r < 8; ++r) {
        for (int c = 0; c < 16; ++c) {
            grid[r][c] = '*';
        }
    }

    // 读取三个正整数编号并进行字符替换
    int code;
    for (int i = 0; i < 3; ++i) {
        if (cin >> code) {
            int idx = code - 1; // 转换为 0-indexed
            int r = idx / 16;   // 计算对应行
            int c = idx % 16;   // 计算对应列
            if (r >= 0 && r < 8 && c >= 0 && c < 16) {
                grid[r][c] = (char)code; // ASCII 强转为字符
            }
        }
    }

    // 格式化输出画布
    for (int r = 0; r < 8; ++r) {
        for (int c = 0; c < 16; ++c) {
            cout << grid[r][c];
        }
        cout << "\n";
    }

    return 0;
}

考点归纳与备考建议

  1. 考纲匹配度:严格对标 CCF GESP 二级考纲重点,绝不超纲,注重基础算法与逻辑建模规范;
  2. 规范防范:所有代码严格以 C++11 标准编译运行,针对整数溢出、边界判断、空状态均做了详尽严整的防御性处理。
💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

💬 读者留言与交流

0 条讨论
✨ 支持 Markdown 语法格式
还没有留言,快来成为第一个讨论者吧!