题解:洛谷 P5730 【深基5.例10】显示屏

【题目来源】

洛谷:P5730 【深基5.例10】显示屏 - 洛谷

【题目描述】

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

【输入】

第一行输入一个正整数 \(n\),表示数字的位数。

第二行输入一个长度为 \(n\) 的自然数。

【输出】

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

【输入样例】

10
0123456789

【输出样例】

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

【算法标签】

《洛谷 P5730 显示屏》 #模拟#

【代码详解】

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

int n;                   // 定义变量:数字的位数
string s[5];             // 定义数组:存储最终输出的5行字符串
string a[10][5];         // 定义二维数组:存储0-9每个数字的5行点阵表示
string str;              // 定义变量:输入的数字字符串

int main()
{
    // 初始化数字0的点阵表示
    a[0][0] = "XXX";
    a[0][1] = "X.X";
    a[0][2] = "X.X";
    a[0][3] = "X.X";
    a[0][4] = "XXX";

    // 初始化数字1的点阵表示
    a[1][0] = "..X";
    a[1][1] = "..X";
    a[1][2] = "..X";
    a[1][3] = "..X";
    a[1][4] = "..X";

    // 初始化数字2的点阵表示
    a[2][0] = "XXX";
    a[2][1] = "..X";
    a[2][2] = "XXX";
    a[2][3] = "X..";
    a[2][4] = "XXX";

    // 初始化数字3的点阵表示
    a[3][0] = "XXX";
    a[3][1] = "..X";
    a[3][2] = "XXX";
    a[3][3] = "..X";
    a[3][4] = "XXX";

    // 初始化数字4的点阵表示
    a[4][0] = "X.X";
    a[4][1] = "X.X";
    a[4][2] = "XXX";
    a[4][3] = "..X";
    a[4][4] = "..X";

    // 初始化数字5的点阵表示
    a[5][0] = "XXX";
    a[5][1] = "X..";
    a[5][2] = "XXX";
    a[5][3] = "..X";
    a[5][4] = "XXX";

    // 初始化数字6的点阵表示
    a[6][0] = "XXX";
    a[6][1] = "X..";
    a[6][2] = "XXX";
    a[6][3] = "X.X";
    a[6][4] = "XXX";

    // 初始化数字7的点阵表示
    a[7][0] = "XXX";
    a[7][1] = "..X";
    a[7][2] = "..X";
    a[7][3] = "..X";
    a[7][4] = "..X";

    // 初始化数字8的点阵表示
    a[8][0] = "XXX";
    a[8][1] = "X.X";
    a[8][2] = "XXX";
    a[8][3] = "X.X";
    a[8][4] = "XXX";

    // 初始化数字9的点阵表示
    a[9][0] = "XXX";
    a[9][1] = "X.X";
    a[9][2] = "XXX";
    a[9][3] = "..X";
    a[9][4] = "XXX";

    // 输入数字位数和数字字符串
    cin >> n >> str;
  
    // 构建点阵输出
    for (int i = 0; i < n; i++) 
    {
        int t = str[i] - '0';  // 将字符数字转换为整型数字
      
        // 将当前数字的点阵拼接到输出字符串中
        for (int j = 0; j < 5; j++) 
        {
            s[j] += a[t][j];    // 拼接当前数字的点阵行
          
            // 如果不是最后一个数字,添加点分隔符
            if (i != n - 1) 
                s[j] += ".";
        }
    }
  
    // 输出最终的点阵结果
    for (int i = 0; i < 5; i++) 
        cout << s[i] << endl;
  
    return 0;                   // 程序正常结束
}

【运行结果】

5
12345
..X.XXX.XXX.X.X.XXX
..X...X...X.X.X.X..
..X.XXX.XXX.XXX.XXX
..X.X.....X...X...X
..X.XXX.XXX...X.XXX
posted @ 2026-02-16 15:44  团爸讲算法  阅读(0)  评论(0)    收藏  举报