【深基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;
}