洛谷【入门4】数组 P5730 【深基5.例10】显示屏

  • Post author:
  • Post category:其他




【深基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 版权协议,转载请附上原文出处链接和本声明。