2391: 【普及-】【P5730】显示屏
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
液晶屏上,每个阿拉伯数字都是可以显示成 的点阵的(其中
X
表示亮点,.
表示暗点)。现在给出数字位数(不超过 )和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。输入
第一行输入一个正整数 ,表示数字的位数。
第二行输入一个长度为 的自然数。
输出
输出五行,表示显示屏上的数字。
样例输入 复制
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
提示
数据保证,。
#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; }