迎春舞会之数字舞蹈
给出数字及其要求摆出的大小,编程摆出数字
【输入格式】
第一行为k。k表示要摆出数字的大小。
第二行为全部由数字组成的字符串,即要摆出的几个数字。
【输出格式】
注意:
每个数字之前有1个空格,所有数字全部对齐。
k<=30,s的长度不超过255
建议大家直接输出,不要保存。
如果对于大小和k有疑问,请自行理解。
【输入样例】
2
1234567890
【输出样例】
-- -- -- -- -- -- -- --
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
-- -- -- -- -- -- --
| | | | | | | | | | | | |
| | | | | | | | | | | | |
-- -- -- -- -- - --
ps:复制到记事本,这上面的太恶心
见到此题目,第一反应是恶心,实在是太没有人性了!这些数字还要对齐输出,太恐怖了!
但后来研究了一些大牛的代码.....实际上也没有那么恶心嘛~言归正传,我们开始讨论题目
首先,我们把0~9按照平面的方式打到记事本上(k=1),空格就打空格,换行先不理,例如:0是-|| ||-,所有的就是这样:
1:-|| ||-
2: | |
3:- |-| -
4:- |- |-
5: ||- |
6:-| - |-
7:-| -||-
8:- | |
9:-||-||-
0:-||- |-
看到这里善于观察的你也许看出来了:当第0,3,6个的字符都是横线,而在1,4则都是竖线,2,5也可以看出来了吧。也就是说,当第%3==0的字符就是横线,其他的就是竖线和空格,然后就是打出k个竖线、横线、空格就行了。所以实际上,你们只要能搞定k=1的情况也就整道题都会了。
如果还没看懂就看代码吧
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
char s[300];
int main()
{
int k,l;
string a[10]={"-|| ||-"," | | ","- |-| -","- |- |-"," ||- | ","-| - |-","-| -||-",
"- | | ","-||-||-","-||- |-"};
scanf("%d%s",&k,s);l=strlen(s);
for(int p=0;p<=6;p++)
{
if(p==2||p==5)continue;
if(p%3==0)
{
for(int i=0;i<l;i++)
{
printf(" ");
for(int j=1;j<=k;j++)cout<<a[s[i]-'0'][p];//k个横线
printf(" ");
printf(" ");//这里的空格就是两个数字间隔着的空格
}
printf("
");
}
else
{
for(int t=1;t<=k;t++)
{
for(int i=0;i<l;i++)
{
cout<<a[s[i]-'0'][p];
for(int j=1;j<=k;j++)printf(" ");//k个空格
cout<<a[s[i]-'0'][p+1];
printf(" ");//这里的空格就是两个数字间隔着的空格
}
printf("
");
}
}
}
return 0;
}