展开
题目背景
HNSDFZ的同学们为了庆祝春节,准备排练一场舞会。
题目描述
在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列。
为了配合每年的倒计时,同学们决定排出——“数字舞蹈”。顾名思义就是所有人一起排成若干个数字 -___-|||| 更为创新的是,每个人都是趴在地上,保证横竖。
现在给出数字及其要求摆出的大小,请你编程,模拟同学们的优美姿态。
输入格式
第一行为k。k表示要摆出数字的大小。
第二行为全部由数字组成的字符串,即要摆出的几个数字。
输出格式
按题目要求输出。
输入输出样例
输入 #1
2
1234567890
输出 #1
说明/提示
除了第一个数字之外,每个数字之前有1个空格,所有数字全部对齐。
k<=30,s的长度不超过255
建议大家直接输出,不要保存。
如果对于大小和k有疑问,请自行理解。
温馨提示
- k的含义(此处k=2)
2.坐标轴
思路分析
1.打一个k=1的表,将k>1的表都平移到k=1的表上。
2.计算要输出的整个表的高度,宽度。h=k2+3;有上面和下面两部分要扩展k倍,所以k2,因为有最上面、中间、最下面这三行所以加3。w=(k+3)*a.length();每个字符的宽度为(每行中间为k,左边、右边、右边一行空格所以加3)因为有a.length()个字符所以要乘a.length()。
3.平移(k-1)个单位去参照k=1的表。注意判断越界问题。
代码
#include <iostream>
using namespace std;
string str[5]={
" - - - - - - - - " ,
"| | | | | | | | | | | | | | " ,
" - - - - - - - " ,
"| | | | | | | | | | | | | ",
" - - - - - - - "
};
string a;
int k,h,w;
char f(int x,int y){
//平移x轴方向(纵坐标)
if(x>0)
x=max(x-(k-1),1);//平移上半部分
if(x>3)
x=max(x-(k-1),3);//平移下半部分
int m=y/(k+3);
y%=(k+3);
//平移y轴方向(横坐标)
if(y>0)
y=max(y-(k-1),1);
//(a[m]-'0')将字符数字装换成数字,k=1时每个数字宽度为4
return str[x][y+(a[m]-'0')*4];
}
int main()
{
cin>>k>>a;
h=k*2+3;
w=(k+3)*a.length();
for(int x=0;x<h;x++){
for(int y=0;y<w;y++){
cout<<f(x,y);
}
cout<<endl;
}
return 0;
}