【深基5.例10】显示屏 · 教师题解

【深基5.例10】显示屏

解题思路

为 0~9 分别保存 5 行、每行 3 列的点阵。输出第 r 行时,依次拼接每个数字点阵的第 r 行,数字之间加一个点。

正确性说明

每个数字取出同一行并按原数字顺序横向连接,五轮输出就构成完整显示屏。

易错点

间隔是点号,不是空格;保留数字串前导零。

复杂度

数字串长度 n,时间 O(n),空间 O(n),点阵表大小固定。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string glyph[10][5] = {
        {"XXX", "X.X", "X.X", "X.X", "XXX"}, {"..X", "..X", "..X", "..X", "..X"},
        {"XXX", "..X", "XXX", "X..", "XXX"}, {"XXX", "..X", "XXX", "..X", "XXX"},
        {"X.X", "X.X", "XXX", "..X", "..X"}, {"XXX", "X..", "XXX", "..X", "XXX"},
        {"XXX", "X..", "XXX", "X.X", "XXX"}, {"XXX", "..X", "..X", "..X", "..X"},
        {"XXX", "X.X", "XXX", "X.X", "XXX"}, {"XXX", "X.X", "XXX", "..X", "XXX"}};
    int n;
    string s;
    cin >> n >> s;
    for (int r = 0; r < 5; r++) {
        for (int i = 0; i < n; i++) {
            if (i)
                cout << ".";
            cout << glyph[s[i] - '0'][r];
        }
        cout << "\n";
    }
    return 0;
}
返回题目