/*
Name:
Copyright:
Author: 巧若拙
Date: 16/08/16 21:12
Description: P1538迎春舞会之数字舞蹈
HNSDFZ的同学们为了庆祝春节,准备排练一场舞会。
题目描述
在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列。
为了配合每年的倒计时,同学们决定排出——“数字舞蹈”。顾名思义就是所有人一起排成若干个数字 -___-|||| 更为创新的是,每个人都是趴在地上,保证横竖。
现在给出数字及其要求摆出的大小,请你编程,模拟同学们的优美姿态。
输入输出格式
输入格式:
第一行为k。k表示要摆出数字的大小。
第二行为全部由数字组成的字符串,即要摆出的几个数字。
输出格式:
按题目要求输出。
输入输出样例
输入样例#1:
2
1234567890
输出样例#1:
-- -- -- -- -- -- -- --
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
-- -- -- -- -- -- --
| | | | | | | | | | | | |
| | | | | | | | | | | | |
-- -- -- -- -- -- --
说明
每个数字之前有1个空格,所有数字全部对齐。
k<=30,s的长度不超过255
建议大家直接输出,不要保存。
如果对于大小和k有疑问,请自行理解。
评测结果:Accepted
得分: 100
提交时间:2016-08-17 07:00 耗时:8ms
内存:18375kb
算法思路一:
用一个二维数组模拟七段管来表示每个数字,下标0-9分别表示数字0-9.
为了便于输出,特设置七段管顺序为:
1
0 2
3
4 6
5
即下标1,3,5分别对应第1,3,5行的"-"符号,第2行包括下标为0,2的"|"符号,第4行包括下标为4,6的"|"符号。
七段管共5行,依次输出七段管的每一行,并用空格把字符串中的每个数字用空格隔开(确保能在同一行中输出全部字符串)
如果是七段管第1,3,5行,输出size个"-"符号;如果是七段管第2,4行,输出size行"|"符号(中间还有size个空格)。
*/
#include
#include
#include
using namespace std;
void PrintNum(int num, int size, int row);
//七段管顺序为
// 1
//0 2
// 3
//4 6
// 5
char numLib[10][8] = {"|-| |-|"," | |", " -|-|- ", " -|- -|", "| |- |", "|- - -|", "|- -|-|", " -| |", "|-|-|-|", "|-|- -|"};
int main()
{
int size;
string num;
cin >> size;
cin >> num;
for (int row=1; row<=5; row++)//依次输出七段管的每一行
{
if (row % 2 == 1)//第1,3,5行
{
for (int i=0; i
/*
算法思路二: (比方法一更为直观的思路,代码也更简洁)
用5个字符串分别模拟七段管的1-5行来表示每个数字。
其中第1,3,5行每个数字只有一个符号"-" 或" ",下标0-9分别表示数字0-9;
第2,4行每个数字有两个符号"|"或" ",下标i*2和i*2+1分别表示数字i在该行的两个符号。
分别用两个不同的函数来输出第1,3,5行和第2,4行。
*/
#include
#include
#include
using namespace std;
void PrintRow_1_3_5(const string ROW, const string numStr, int size);//打印七段管的第1,3,5行
void PrintRow_2_4(const string ROW, const string numStr, int size);//打印七段管的第2,4行
//分别表示七段管0-9个数字在1-5行中对应位置的符号,其中第1,3,5行每个数字只有一个符号"-" 或" ";第2,4行每行有两个符号"|"或" "。
const string ROW_1 = "- -- -----";
const string ROW_2 = "|| | | |||| | |||||";
const string ROW_3 = " ----- --";
const string ROW_4 = "|| || | | ||| ||| |";
const string ROW_5 = "- -- -- --";
int main()
{
int size;
string numStr;
cin >> size;
cin >> numStr;
//依次输出七段管的每一行
PrintRow_1_3_5(ROW_1, numStr, size);
PrintRow_2_4(ROW_2, numStr, size);
PrintRow_1_3_5(ROW_3, numStr, size);
PrintRow_2_4(ROW_4, numStr, size);
PrintRow_1_3_5(ROW_5, numStr, size);
return 0;
}
void PrintRow_1_3_5(const string ROW, const string numStr, int size)//打印七段管的第1,3,5行
{
int len = numStr.size();
for (int i=0; i