题目
Time limit: 3.000 seconds
解题思路
1.把一个数字看成是5*3的矩阵,提前算好10个数字的打印模式,最后根据输入一行一行地输出
2.设n是打印数值的位数,那么时间复杂度是Θ(n),空间复杂度是O(1)
通过代码
<pre name="code" class="cpp">#include<stdio.h>
#include<string.h>
bool h1[10]={1,0,1,1,0,1,1,1,1,1};
bool h2[10]={0,0,1,1,1,1,1,0,1,1};
bool h3[10]={1,0,1,1,0,1,1,0,1,1};
bool v11[10]={1,0,0,0,1,1,1,0,1,1};
bool v12[10]={1,1,1,1,1,0,0,1,1,1};
bool v21[10]={1,0,1,0,0,0,1,0,1,0};
bool v22[10]={1,1,0,1,1,1,1,1,1,1};
void print_1h(char n[],int s,bool h[]){
for(int i=0;i<strlen(n);++i){
printf(" ");
for(int j=0;j<s;++j)
if(h[n[i]-'0'])
printf("-");
else
printf(" ");
printf(" ");
if(i<strlen(n)-1)
printf(" ");
}
printf("\n");
}
void print_3v(char n[],int s,bool vl[],bool vr[]){
for(int j=0;j<s;++j){
for(int i=0;i<strlen(n);++i){
if(vl[n[i]-'0'])
printf("|");
else
printf(" ");
for(int k=0;k<s;++k)
printf(" ");
if(vr[n[i]-'0'])
printf("|");
else
printf(" ");
if(i<strlen(n)-1)
printf(" ");
}
printf("\n");
}
}
int main(){
int s;
char n[10];
#ifdef DEBUG
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif
while(true){
scanf("%d%s",&s,n);
if(s==0)
break;
//print h1
print_1h(n,s,h1);
//print v11 blank v12
print_3v(n,s,v11,v12);
//print h2
print_1h(n,s,h2);
//print v21 blank v22
print_3v(n,s,v21,v22);
//print h3
print_1h(n,s,h3);
printf("\n");
}
return 0;
}