这个题就是简单的模拟题,我的思路是一层一层的输出,具体输出用函数实现,这样就简单多了!不过代码有点长,我相信这没有什么影响!我把每个数字输出分成了5个部分,这样便于检查和阅读!
代码如下:
#include<stdio.h>
char s[20];
int n;
void Outputc(char ch){
printf(" ");
for(int i=0;i<n;i++)
printf("%c",ch);
printf(" ");
}
void TOP(){
int i;
for(i=0;s[i];i++)
{
if(s[i]=='4' || s[i]=='1')
Outputc(' ');
else
Outputc('-');
if(s[i+1])
printf(" ");
}
printf("\n");
}
void Left(){
int i;
printf("|");
for(i=0;i<=n;i++)
printf(" ");
}
void Right(){
int i;
for(i=0;i<=n;i++)
printf(" ");
printf("|");
}
void Double(){
int i;
printf("|");
for(i=0;i<n;i++)
printf(" ");
printf("|");
}
void MIDtop(){
int i;
for(i=0;s[i];i++){
if(s[i]=='1' || s[i]=='2' || s[i]=='3' || s[i]=='7')
Right();
else if(s[i]=='5' || s[i]=='6')
Left();
else
Double();
if(s[i+1])
printf(" ");
}
printf("\n");
}
void MID(){
int i;
for(i=0;s[i];i++){
if(s[i]=='1' || s[i]=='7' || s[i]=='0')
Outputc(' ');
else
Outputc('-');
if(s[i+1])
printf(" ");
}
printf("\n");
}
void MIDbot(){
int i;
for(i=0;s[i];i++){
if(s[i]=='9' || s[i]=='1' || s[i]=='3' || s[i]=='4' || s[i]=='5' || s[i]=='7')
Right();
else if(s[i]=='2')
Left();
else
Double();
if(s[i+1])
printf(" ");
}
printf("\n");
}
void BOT(){
int i;
for(i=0;s[i];i++){
if(s[i]=='1' || s[i]=='4' || s[i]=='7')
Outputc(' ');
else
Outputc('-');
if(s[i+1])
printf(" ");
}
printf("\n");
}
int main(){
int i;
while(1){
scanf("%d%s",&n,s);
if(n==0)
break;
TOP();//第一个部分
for(i=0;i<n;i++)
MIDtop();//第二个部分
MID();//第三个部分
for(i=0;i<n;i++)
MIDbot();//第四个部分
BOT();//第五个部分
printf("\n");
}
return 0;
}