luogu-B4067 [GESP202412 三级] 打印数字

luogu-B4067 [GESP202412 三级] 打印数字

GESP三级真题,字符串相关题目,难度★★☆☆☆。

luogu-B4067 [GESP202412 三级] 打印数字

题目要求

题目描述

小杨为数字 0,1,20,1,233 设计了一款表示形式,每个数字占用了 5×55\times 5 的网格。数字 0,1,20,1,233 的表示形式如下:

..... ****. ..... .....
.***. ****. ****. ****.
.***. ****. ..... .....
.***. ****. .**** ****.
..... ****. ..... .....

小杨想请你将给定的数字 nn 转换为对应的表示形式。

输入格式

第一行包含一个正整数代表 nn

输出格式

输出对应的表示形式。

输入输出样例 #1

输入 #1

12230

输出 #1

****.....................
****.****.****.****..***.
****.................***.
****..****.********..***.
****.....................

说明/提示

对于全部数据,保证有 0n1060\le n\le 10^6,且 nn 仅由数字 0,1,2,30,1,2,3 组成。


题目分析

解题思路

本题的解题思路如下:

  1. 输入处理:

    • 读取一个数字 nn 作为输入
    • 将数字转换为字符串,方便逐位处理
  2. 核心逻辑:

    • 预定义 030-344 个数字在 5×55\times5 网格中的显示样式
    • 按行处理输出:
      • 对于每一行,遍历输入数字的每一位
      • 根据当前数字和当前行号,输出对应的显示样式
    • 每行处理完成后换行
  3. 输出格式:

    • 每个数字占用 5×55\times5 的网格空间
    • 数字之间没有间隔
    • 共输出 55

复杂度分析:

  • 时间复杂度:O(L)O(L),其中L为输入数字的位数
  • 空间复杂度:O(1)O(1),只需要存储固定大小的显示样式数组

{% include custom/custom-post-content-inner.html %}


示例代码

#include <iostream>
#include <string>

int main() {
    // 定义5个数组存储0-3这4个数字在5x5网格中每一行的显示样式
    std::string line_one[] = {".....", "****.", ".....", "....."};
    std::string line_two[] = {".***.", "****.", "****.", "****."};
    std::string line_three[] = {".***.", "****.", ".....", "....."};
    std::string line_four[] = {".***.", "****.", ".****", "****."};
    std::string line_five[] = {".....", "****.", ".....", "....."};

    // 读入输入的数字
    int n;
    std::cin >> n;

    // 将数字转换为字符串,方便逐位处理
    std::string n_str = std::to_string(n);

    // 按行输出每个数字的显示样式
    // 第一行
    for (int i = 0; i < n_str.size(); i++) {
        int cur_num = n_str[i] - '0';  // 将字符转换为对应的数字
        std::cout << line_one[cur_num];
    }
    std::cout << std::endl;

    // 第二行
    for (int i = 0; i < n_str.size(); i++) {
        int cur_num = n_str[i] - '0';
        std::cout << line_two[cur_num];
    }
    std::cout << std::endl;

    // 第三行
    for (int i = 0; i < n_str.size(); i++) {
        int cur_num = n_str[i] - '0';
        std::cout << line_three[cur_num];
    }
    std::cout << std::endl;

    // 第四行
    for (int i = 0; i < n_str.size(); i++) {
        int cur_num = n_str[i] - '0';
        std::cout << line_four[cur_num];
    }
    std::cout << std::endl;

    // 第五行
    for (int i = 0; i < n_str.size(); i++) {
        int cur_num = n_str[i] - '0';
        std::cout << line_five[cur_num];
    }
    return 0;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on