【深基5.例10】显示屏
题目描述
液晶屏上,每个阿拉伯数字都是可以显示成 3×5 的点阵的(其中 X 表示亮点,. 表示暗点)。现在给出数字位数(不超过 100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
10
0123456789
输出 #1复制
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
可以先写出数字表然后用一个二维数组去模拟屏幕,根据用户输入进行填充屏幕然后显示屏幕即可。
AC代码(C++)
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
//把数字表写出
char numarr[10][5][3] =//numarr[i][j][k]表示第i个数字的第j行的第k列.
{
{//0
'X','X','X',
'X','.','X',
'X','.','X',
'X','.','X',
'X','X','X',
},
{//1
'.','.','X',
'.','.','X',
'.','.','X',
'.','.','X',
'.','.','X',
},
{//2
'X','X','X',
'.','.','X',
'X','X','X',
'X','.','.',
'X','X','X',
},
{//3
'X','X','X',
'.','.','X',
'X','X','X',
'.','.','X',
'X','X','X',
},
{//4
'X','.','X',
'X','.','X',
'X','X','X',
'.','.','X',
'.','.','X',
},
{//5
'X','X','X',
'X','.','.',
'X','X','X',
'.','.','X',
'X','X','X',
},
{//6
'X','X','X',
'X','.','.',
'X','X','X',
'X','.','X',
'X','X','X',
},
{//7
'X','X','X',
'.','.','X',
'.','.','X',
'.','.','X',
'.','.','X',
},
{//8
'X','X','X',
'X','.','X',
'X','X','X',
'X','.','X',
'X','X','X',
},
{//9
'X','X','X',
'X','.','X',
'X','X','X',
'.','.','X',
'X','X','X',
}
};
char ansarr[5][1024]; //模拟电子屏幕
//初始化屏幕用点填充
memset(ansarr, '.', static_cast<size_t>(5 * 1024));
//存储要显示的数据
string s;
//数字个数
int n;
cin >> n;
cin >> s;
//给屏幕填充
for (int i = 0; i < n; i++)
for (int j = 0; j < 5; j++)
for (int k = 0; k < 3; k++)
ansarr[j][k + (i * 4)] = numarr[(s[i] - '0')][j][k];
//一个数字3列加上一个空列是四列,s[i]-'0'得到当前数字
//显示屏幕
for (int i = 0; i < 5; i++)
{
//一个数字3列加上一个空列是四列但是最后一行没有空列所以减一
//所以需要显示的屏幕长度为n * 4 - 1
for (int j = 0; j < n * 4 - 1; j++)
cout << ansarr[i][j];
cout << endl;
}
return 0;
}
版权声明:本文为m0_52072919原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。