題目大意:
s, n (1 <= s <= 10, 0 <= n <= 99 999 999),
每次輸入s,n,,將n輸出成LC樣式,"-" 表示橫向段, "|"表示縱向段每個數字占 s+2 列 2s+3 行.
兩個數字之間有一空列.在每個數後輸出一空行.www.2cto.com
解題思路:
將每個數字的7段是否要顯示用一個數組保存起來.然後對於每個數,先處理頂部行,
在輸出中間s行,等等。對於每行,又由對每個數字的輸出和空格組成。
對那3行,先輸出一個空格,然後根據數組看是輸出s個"-"還是空格,再輸出一個空格。
對於那2s行,先根據數組看是輸出空格還是豎線,再輸出s個空格,等等。
代碼:
[cpp]
// 代碼一
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
bool map[10][7]= {
1,1,1,0,1,1,1,
0,0,1,0,0,1,0,
1,0,1,1,1,0,1,
1,0,1,1,0,1,1,
0,1,1,1,0,1,0,
1,1,0,1,0,1,1,
1,1,0,1,1,1,1,
1,0,1,0,0,1,0,
1,1,1,1,1,1,1,
1,1,1,1,0,1,1 };
void printDigit(bool left,bool mid,bool right,int s)//處理每一行的數字輸出
{ printf("%c",left?'|':' ');
for(int i=0;i<s;i++)printf("%c",mid?'-':' ');
printf("%c",right?'|':' ');
}
int main(int argc, char *argv[])
{
int s,flag=0;
char n[20];
bool left,mid,right;
while(scanf("%d%s",&s,n)==2&&s)
{ int len=strlen(n);
for(int i=0;i<len;i++) //最頂端一行
{ printDigit(0,map[n[i]-'0'][0],0,s);
if(i==len-1)printf("\n");
else printf(" ");
}
for(int j=0;j<s;j++)//上邊s行
{
for(int i=0;i<len;i++)
{ printDigit(map[n[i]-'0'][1],0,map[n[i]-'0'][2],s);
if(i==len-1)printf("\n");
else printf(" ");
}
}
for(int i=0;i<len;i++)//中間行
{ printDigit(0,map[n[i]-'0'][3],0,s);
if(i==len-1)printf("\n");
else printf(" ");
}
for(int j=0;j<s;j++)//下邊s行
{
for(int i=0;i<len;i++)
{ printDigit(map[n[i]-'0'][4],0,map[n[i]-'0'][5],s);
if(i==len-1)printf("\n");
else printf(" ");
}
}
for(int i=0;i<len;i++)//底行
{ printDigit(0,map[n[i]-'0'][6],0,s);
if(i==len-1)printf("\n");
else printf(" ");
}
printf("\n");
}
return 0;
}
[cpp]
// 代碼二
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
bool map[10][7]= {
1,1,1,0,1,1,1,
0,0,1,0,0,1,0,
1,0,1,1,1,0,1,
1,0,1,1,0,1,1,
0,1,1,1,0,1,0,
1,1,0,1,0,1,1,
1,1,0,1,1,1,1,
1,0,1,0,0,1,0,
1,1,1,1,1,1,1,
1,1,1,1,0,1,1 };
void printDigit(bool left,bool mid,bool right,int s) //輸出每個數字的一行
{ printf("%c",left?'|':' ');
for(int i=0;i<s;i++)printf("%c",mid?'-':' ');
printf("%c",right?'|':' ');
}
void printRow(bool isH,int c,int s,char* n,int len)//輸出一行
{
for(int i=0;i<len;i++)
{ if(1==isH)printDigit(0,map[n[i]-'0'][c],0,s);
else printDigit(map[n[i]-'0'][c],0,map[n[i]-'0'][c+1],s);
if(i==len-1)printf("\n");
else printf(" ");
}
}
int main(int argc, char *argv[])
{
int s,flag=0;
char n[20];
bool left,mid,right;
while(scanf("%d%s",&s,n)==2&&s)
{ int len=strlen(n);
printRow(1,0,s,n,len);
for(int j=0;j<s;j++)
printRow(0,1,s,n,len);
printRow(1,3,s,n,len);
for(int j=0;j<s;j++)
printRow(0,4,s,n,len);
printRow(1,6,s,n,len);
printf("\n");
}
return 0;
}