洛谷P1538 迎春舞会之数字舞蹈

Description

在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列。

为了配合每年的倒计时,同学们决定排出——“数字舞蹈”。顾名思义就是所有人一起排成若干个数字,更为创新的是,每个人都是趴在地上,保证横竖。

现在给出数字及其要求摆出的大小,请你编程,模拟同学们的优美姿态。

Input

第一行为k。k表示要摆出数字的大小。

第二行为全部由数字组成的字符串,即要摆出的几个数字。

Output

按题目要求输出。

Sample Input

1
2
2
1234567890

Sample Output

1
2
3
4
5
6
7
   --   --        --   --   --   --   --   -- 
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
-- -- -- -- -- -- --
| | | | | | | | | | | | |
| | | | | | | | | | | | |
-- -- -- -- -- -- --

Analysis

每个数字,考虑每根线的占位,从上至下从左至右,最多的由7根线组成。可以用一个字符串数组来保存0-9每个数字的组成方式。

比如数字8就是“-||-||-”,空位用空格占位,那么1就是“ | | ”,以此类推。

打印时分为横线和竖线。可以发现横线刚好是0,3,6位,可以用模3取余来判断是否为横线。

大小k就是循环打印k个空格或k条线。

注意打印的时候不是每次打印一个数字,而是一行一行打印。

Code

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
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string map[10] = { "-|| ||-"," | | ","- |-| -","- |- |-"," ||- | ","-| - |-","-| -||-","- | | ","-||-||-","-||- |-" };

int main()
{
string s;
int k;
cin >> k;
cin.get();
cin >> s;
for (int n = 0; n < 7; n++)
{
if (n % 3 == 0)
{
for (int i = 0; i < s.size(); i++)
{
cout << ' ';
for (int j = 0; j < k; j++)
{
cout << map[s[i] - '0'][n];
}
cout << " ";
}
cout << endl;
}
else if (n == 1 || n == 4)
{
for (int m = 0; m < k; m++)
{
for (int i = 0; i < s.size(); i++)
{
cout << map[s[i] - '0'][n];
for (int j = 0; j < k; j++)
{
cout << ' ';
}
cout << map[s[i] - '0'][n + 1] << ' ';
}
cout << endl;
}
}
}
return 0;
}