【洛谷 P5730】【深基5.例10】显示屏 题解(数组+循环)

2023-10-08 02:12

本文主要是介绍【洛谷 P5730】【深基5.例10】显示屏 题解(数组+循环),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【深基5.例10】显示屏

题目描述

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

输入格式

第一行输入一个正整数 n n n,表示数字的位数。

第二行输入一个长度为 n n n 的自然数。

输出格式

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

样例 #1

样例输入 #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

提示

数据保证, 1 ≤ n ≤ 100 1 \leq n \leq 100 1n100


思路

使用一个二维数组 t 来存储数字 0 到 9 的显示模式。每个数字的显示模式由一个 5x3 的字符数组表示,其中 ‘X’ 表示亮点,‘.’ 表示空白。

根据输入的数字字符串,使用 printNum 函数将每个数字的显示模式复制到一个二维字符数组 s 中。在复制过程中,使用 offset 变量来记录每个数字的偏移量,以便正确地放置数字。每个数字之间通过 printLine 函数插入一行空白。最后,将 s 数组中的内容输出到屏幕上。


AC代码

#include <iostream>
#include <string>
#define AUTHOR "HEX9CF"
using namespace std;const int N = 1e3 + 5;
const char t[10][5][3] = {{ 'X', 'X', 'X', 'X', '.', 'X', 'X', '.', 'X', 'X', '.', 'X', 'X', 'X', 'X', }, { '.', '.', 'X', '.', '.', 'X', '.', '.', 'X', '.', '.', 'X', '.', '.', 'X', }, { 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', }, { 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', 'X', }, { 'X', '.', 'X', 'X', '.', 'X', 'X', 'X', 'X', '.', '.', 'X', '.', '.', 'X', }, { 'X', 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', 'X', }, { 'X', 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', 'X', '.', 'X', 'X', 'X', 'X', }, { 'X', 'X', 'X', '.', '.', 'X', '.', '.', 'X', '.', '.', 'X', '.', '.', 'X', }, { 'X', 'X', 'X', 'X', '.', 'X', 'X', 'X', 'X', 'X', '.', 'X', 'X', 'X', 'X', }, { 'X', 'X', 'X', 'X', '.', 'X', 'X', 'X', 'X', '.', '.', 'X', 'X', 'X', 'X', }};int n;
int offset;
string str;
char s[5][N];void printNum(int x)
{for (int i = 0; i < 5; i++){for (int j = 0; j < 3; j++){s[i][offset + j] = t[x][i][j];}}offset += 3;
}void printLine()
{for (int i = 0; i < 5; i++){s[i][offset] = '.';}offset++;
}int main()
{cin >> n;cin >> str;offset = 0;for (int i = 0; i < n; i++){if (i){printLine();}printNum(str[i] - '0');}// cout << offset << endl;for (int i = 0; i < 5; i++){for (int j = 0; j <= offset; j++){putchar(s[i][j]);}putchar('\n');}return 0;
}

这篇关于【洛谷 P5730】【深基5.例10】显示屏 题解(数组+循环)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/162008

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou