luogu-P5730 【深基5.例10】显示屏

luogu-P5730 【深基5.例10】显示屏

GESP C++四级,多维(二维)数组应用练习,难度⭐⭐★☆☆。

luogu-P5730 【深基5.例10】显示屏

题目要求

题目描述

液晶屏上,每个阿拉伯数字都是可以显示成 3×53\times5 的点阵的(其中 X 表示亮点,. 表示暗点)。现在给出数字位数(不超过 100100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。

输入格式

第一行输入一个正整数 nn,表示数字的位数。

第二行输入一个长度为 nn 的自然数。

输出格式

输出五行,表示显示屏上的数字。

输入输出样例 #1

输入 #1

10
0123456789

输出 #1

XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX
X.X...X...X...X.X.X.X...X.....X.X.X.X.X
X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX
X.X...X.X.....X...X...X.X.X...X.X.X...X
XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX

说明/提示

数据保证,1n1001 \leq n \leq 100


题目分析

解题思路

本题的解题思路如下:

  1. 数据结构设计

    • 使用二维字符串数组存储数字显示样式
    • 数组大小为 5×10,对应每个数字的 3×5 显示区域
    • 每个数字之间需要一列间隔
  2. 初始化显示样式

    • 需要初始化0-9十个数字的显示样式
    • 每个数字由 “X” 和 “.” 组成
    • 使用二维数组 array[5][10] 存储
  3. 输入处理

    • 读入数字位数 nn
    • 读入 nn 位数字字符串
    • 数据范围:1n1001 \leq n \leq 100
  4. 输出实现

    • 按行输出,共5行
    • 每行需要遍历所有数字
    • 每个数字之间添加一个 “.” 作为间隔
    • 每行末尾换行
  5. 算法分析

    • 时间复杂度:O(n)O(n)
      • nn为数字位数
      • 每个数字需要输出固定大小的显示样式
    • 空间复杂度:O(1)O(1)
      • 使用固定大小的二维数组存储显示样式
      • 输入字符串最大长度为100100

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


示例代码

#include <iostream>

// 定义5x10的字符串数组,用于存储0-9数字的显示样式
std::string array[5][10];
int main() {
    // 数字0的显示样式
    array[0][0] = "XXX";
    array[1][0] = "X.X";
    array[2][0] = "X.X";
    array[3][0] = "X.X";
    array[4][0] = "XXX";

    // 数字1的显示样式
    array[0][1] = "..X";
    array[1][1] = "..X";
    array[2][1] = "..X";
    array[3][1] = "..X";
    array[4][1] = "..X";

    // 数字2的显示样式
    array[0][2] = "XXX";
    array[1][2] = "..X";
    array[2][2] = "XXX";
    array[3][2] = "X..";
    array[4][2] = "XXX";

    // 数字3的显示样式
    array[0][3] = "XXX";
    array[1][3] = "..X";
    array[2][3] = "XXX";
    array[3][3] = "..X";
    array[4][3] = "XXX";

    // 数字4的显示样式
    array[0][4] = "X.X";
    array[1][4] = "X.X";
    array[2][4] = "XXX";
    array[3][4] = "..X";
    array[4][4] = "..X";

    // 数字5的显示样式
    array[0][5] = "XXX";
    array[1][5] = "X..";
    array[2][5] = "XXX";
    array[3][5] = "..X";
    array[4][5] = "XXX";

    // 数字6的显示样式
    array[0][6] = "XXX";
    array[1][6] = "X..";
    array[2][6] = "XXX";
    array[3][6] = "X.X";
    array[4][6] = "XXX";

    // 数字7的显示样式
    array[0][7] = "XXX";
    array[1][7] = "..X";
    array[2][7] = "..X";
    array[3][7] = "..X";
    array[4][7] = "..X";

    // 数字8的显示样式
    array[0][8] = "XXX";
    array[1][8] = "X.X";
    array[2][8] = "XXX";
    array[3][8] = "X.X";
    array[4][8] = "XXX";

    // 数字9的显示样式
    array[0][9] = "XXX";
    array[1][9] = "X.X";
    array[2][9] = "XXX";
    array[3][9] = "..X";
    array[4][9] = "XXX";

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

    // 读入n位数字字符串
    std::string str;
    std::cin >> str;

    // 按行输出数字的显示效果
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < n; j++) {
            // 输出当前数字的当前行
            std::cout << array[i][str[j] - '0'];
            // 除了最后一个数字,每个数字后面都要加一个点
            if (j != n - 1) {
                std::cout << ".";
            }
        }
        // 每行结束换行
        std::cout << "\n";
    }
    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