【GESP】C++四级练习 luogu-P5730 【深基5.例10】显示屏
GESP C++四级,多维(二维)数组应用练习,难度⭐⭐★☆☆。
luogu-P5730 【深基5.例10】显示屏
题目要求
题目描述
液晶屏上,每个阿拉伯数字都是可以显示成 $3\times5$ 的点阵的(其中
X
表示亮点,.
表示暗点)。现在给出数字位数(不超过 $100$)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。
输入格式
第一行输入一个正整数 $n$,表示数字的位数。
第二行输入一个长度为 $n$ 的自然数。
输出格式
输出五行,表示显示屏上的数字。
输入输出样例 #1
输入 #1
1
2
10
0123456789
输出 #1
1
2
3
4
5
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
说明/提示
数据保证,$1 \leq n \leq 100$。
题目分析
解题思路
本题的解题思路如下:
- 数据结构设计
- 使用二维字符串数组存储数字显示样式
- 数组大小为 5×10,对应每个数字的 3×5 显示区域
- 每个数字之间需要一列间隔
- 初始化显示样式
- 需要初始化0-9十个数字的显示样式
- 每个数字由 “X” 和 “.” 组成
- 使用二维数组
array[5][10]
存储
- 输入处理
- 读入数字位数 $n$
- 读入 $n$ 位数字字符串
- 数据范围:$1 \leq n \leq 100$
- 输出实现
- 按行输出,共5行
- 每行需要遍历所有数字
- 每个数字之间添加一个 “.” 作为间隔
- 每行末尾换行
- 算法分析
- 时间复杂度:$O(n)$
- $n$为数字位数
- 每个数字需要输出固定大小的显示样式
- 空间复杂度:$O(1)$
- 使用固定大小的二维数组存储显示样式
- 输入字符串最大长度为$100$
- 时间复杂度:$O(n)$
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
// 定义5x10的字符串数组,用于存储0-9数字的显示样式
std::string array[5][10];
int main() {
// 数字0的显示样式
array[0][0] = "XXX";
array[1][0] = "X.X";
array[2][0] = "X.X";
array[3][0] = "X.X";
array[4][0] = "XXX";
// 数字1的显示样式
array[0][1] = "..X";
array[1][1] = "..X";
array[2][1] = "..X";
array[3][1] = "..X";
array[4][1] = "..X";
// 数字2的显示样式
array[0][2] = "XXX";
array[1][2] = "..X";
array[2][2] = "XXX";
array[3][2] = "X..";
array[4][2] = "XXX";
// 数字3的显示样式
array[0][3] = "XXX";
array[1][3] = "..X";
array[2][3] = "XXX";
array[3][3] = "..X";
array[4][3] = "XXX";
// 数字4的显示样式
array[0][4] = "X.X";
array[1][4] = "X.X";
array[2][4] = "XXX";
array[3][4] = "..X";
array[4][4] = "..X";
// 数字5的显示样式
array[0][5] = "XXX";
array[1][5] = "X..";
array[2][5] = "XXX";
array[3][5] = "..X";
array[4][5] = "XXX";
// 数字6的显示样式
array[0][6] = "XXX";
array[1][6] = "X..";
array[2][6] = "XXX";
array[3][6] = "X.X";
array[4][6] = "XXX";
// 数字7的显示样式
array[0][7] = "XXX";
array[1][7] = "..X";
array[2][7] = "..X";
array[3][7] = "..X";
array[4][7] = "..X";
// 数字8的显示样式
array[0][8] = "XXX";
array[1][8] = "X.X";
array[2][8] = "XXX";
array[3][8] = "X.X";
array[4][8] = "XXX";
// 数字9的显示样式
array[0][9] = "XXX";
array[1][9] = "X.X";
array[2][9] = "XXX";
array[3][9] = "..X";
array[4][9] = "XXX";
// 读入数字的位数
int n;
std::cin >> n;
// 读入n位数字字符串
std::string str;
std::cin >> str;
// 按行输出数字的显示效果
for (int i = 0; i < 5; i++) {
for (int j = 0; j < n; j++) {
// 输出当前数字的当前行
std::cout << array[i][str[j] - '0'];
// 除了最后一个数字,每个数字后面都要加一个点
if (j != n - 1) {
std::cout << ".";
}
}
// 每行结束换行
std::cout << "\n";
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲、真题讲解、知识拓展和练习清单等详见【置顶】【GESP】C++ 认证学习资源汇总
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY 4.0 进行授权