2391: 【普及-】【P5730】显示屏

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:1 解决:1

题目描述

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

输入

第一行输入一个正整数 lns="http://www.w3.org/1998/Math/MathML">,表示数字的位数。

第二行输入一个长度为 lns="http://www.w3.org/1998/Math/MathML"> 的自然数。

输出

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

样例输入 复制

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

提示

数据保证,lns="http://www.w3.org/1998/Math/MathML">1100

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

int main(){
    int tubes[10][8]={//数码i的第j个显示管是什么
        {6,0,1,2,4,5,6},{2,2,5},{5,0,2,3,4,6},{5,0,2,3,5,6},// 0123
		{4,1,2,3,5},{5,0,1,3,5,6},{6,0,1,3,4,5,6},{3,0,2,5},// 4567
		{7,0,1,2,3,4,5,6},{6,0,1,2,3,5,6} //  89
	    }; 
    int dot [7][3][2]={//每个显示管的3个点相对于左上角的坐标偏移
        {{0,0},{0,1},{0,2}},
		{{0,0},{1,0},{2,0}},
		{{0,2},{1,2},{2,2}},
		{{2,0},{2,1},{2,2}},
		{{2,0},{3,0},{4,0}},
		{{2,2},{3,2},{4,2}},
		{{4,0},{4,1},{4,2}},
	};
    char num[1101], out[5][500]; 
	int n;
    cin >> n;
    for (int i = 0; i<n; i++)
        cin >> num[i];
    for (int i = 0; i<5; i++)
        for (int j=0; j<4*n-1;j++)
            out[i][j] ='.';
    for (int i=0;i<n;i++) {// 处理每个字符
        int basex = 0, basey = i * 4, digit = num[i]-'0';
        /*basex和basey是每个数字左上角的坐标值,dight正在处理哪一个数码(转换成int)*/
        for (int j =1; j <= tubes[digit][0];j++){  // 处理每个要被点亮的显示管
            int tubenum = tubes[digit][j];  //第几个显示管点亮
            out [basex+dot[tubenum][0][0]][basey+dot[tubenum][0][1]] = 'X'; 
			out [basex+dot[tubenum][1][0]][basey+dot[tubenum][1][1]] = 'X'; 
			out [basex+dot[tubenum][2][0]][basey+dot[tubenum][2][1]] = 'X';
        }
    }
    for (int i = 0; i < 5; i++, cout << endl)
        for (int j = 0; j < 4 *n- 1; j++)
            cout << out[i][j];
    return 0;
}