又是一道模拟题啊,没啥技巧,k表示连续的-或|的个数。。清晰明了吧,嘿嘿。。
我的想法就是强行模拟,扫到这个数,把它按到画布上,一个小窍门,可以先画8,这样三道横和六个竖就画好了,然后别的复制粘贴删掉一些没用的就好了。。对了,提前将画布预处理成全是空格哦。。。然后最后将画布从上到下输出就好啦。。
代码:
#include
#include
#include
#include
using namespace std;
int n,k,cnt;
string s;
char map[4500][4500],a[4500];
void paint(int x,int number){
if(number==0){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x]='|',map[1+i][x+k+1]='|',map[1+k+1+i][x]='|',map[1+k+1+i][x+k+1]='|';
}
if(number==1)
for(int i=1;i<=k;i++)
map[i+1][x+k+1]='|',map[1+k+1+i][x+k+1]='|';
if(number==2){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x]='|',map[1+k+1+i][x+k+1]='|';
}
if(number==3){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x+k+1]='|',map[1+k+1+i][x+k+1]='|';
}
if(number==4){
for(int i=1;i<=k;i++)
map[1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x+k+1]='|',map[1+k+1+i][x]='|',map[1+k+1+i][x+k+1]='|';
}
if(number==5){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x+k+1]='|',map[1+k+1+i][x]='|';
}
if(number==6){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x]='|',map[1+i][x+k+1]='|',map[1+k+1+i][x]='|';
}
if(number==7){
for(int i=1;i<=k;i++)
map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[i+1][x+k+1]='|',map[1+k+1+i][x+k+1]='|';
}
if(number==8){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x]='|',map[1+i][x+k+1]='|',map[1+k+1+i][x]='|',map[1+k+1+i][x+k+1]='|';
}
if(number==9){
for(int i=1;i<=k;i++)
map[1][x+i]='-',map[1+k+1][x+i]='-',map[1+k+1+k+1][x+i]='-';
for(int i=1;i<=k;i++)
map[1+i][x+k+1]='|',map[1+k+1+i][x]='|',map[1+k+1+i][x+k+1]='|';
}
}
int main(){
scanf("%d\n",&k);
cin>>s;
for(int i=1;i<=s.size();i++)
a[i]=s[i-1];
for(int i=1;i<=4000;i++)
for(int j=1;j<=4000;j++)
map[i][j]=' ';
n=s.size();
cnt=1;//记录画到哪一列(画布最下面是第一行),要注意每一个输出一个数字要输出一个空格,第一个没有空格。
for(int i=1;i<=n;i++){
if(a[i]=='0')
paint(cnt,0);
if(a[i]=='1')
paint(cnt,1);
if(a[i]=='2')
paint(cnt,2);
if(a[i]=='3')
paint(cnt,3);
if(a[i]=='4')
paint(cnt,4);
if(a[i]=='5')
paint(cnt,5);
if(a[i]=='6')
paint(cnt,6);
if(a[i]=='7')
paint(cnt,7);
if(a[i]=='8')
paint(cnt,8);
if(a[i]=='9')
paint(cnt,9);
cnt=cnt+k+1+1+1;
}
for(int i=1+k+1+k+1;i>=1;i--){
for(int j=1;j<=cnt-1;j++)
printf("%c",map[i][j]);
printf("\n");
}
return 0;
}