题目链接】​​click here~~​

题目大意

给定的数字序列,按照要求输出对应液晶显示屏上的数字

输入:


2 12345 3 67890 0 0

输出:


-- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- ---


解题思路

模拟,考的就是细心了,先将n拆分为单个的数字,用一个数组存起来 ,定义每个数字的关键笔划,可以知道之后的笔画其实就是重复之前的笔画!

代码:

/*
Author :HRW
UVA 706
字符串模拟
思路:先将n拆分为单个的数字,用一个数组存起来
定义每个数字的关键笔划,可以知道之后的笔画其实就是重复之前的笔画!
*/
#include <bits/stdc++.h>
using namespace std;
void AC(int s,int n)
{
int a[8];
memset(a,-1,sizeof(a)); // 将n拆分为单个的数字。
if(n==0) a[7]=0;
else{
for(int i=7;n>0; i--){
a[i]=n%10;
n/=10;
}
} // 定义每个数字的关键笔划。
string str[5][10]={
" - ", " ", " - ", " - ", " ", " - ", " - ", " - ", " - ", " - ",
"| |", " |", " |", " |", "| |", "| ", "| ", " |", "| |", "| |",
" ", " ", " - ", " - ", " - ", " - ", " - ", " ", " - ", " - ",
"| |", " |", "| ", " |", " |", " |", "| |", " |", "| |", " |",
" - ", " ", " - ", " - ", " ", " - ", " - ", " ", " - ", " - "
};
// 将关键笔划扩大显示,从上到下分成5块,依次判断,实际上就是将关键笔划重复。
for(int i=1;i<=(s*2+3);i++){
for(int j=0;j<8;j++){
if(a[j]!=-1){
string ss;
if(i==1) ss=str[0][a[j]];
if(2<=i&&i<s+2)ss=str[1][a[j]];
if(i==(s+2)) ss=str[2][a[j]];
if(s+3<=i&&i<=(2*s+2)) ss=str[3][a[j]];
if(i==(2*s+3)) ss=str[4][a[j]];
cout<<ss[0]; // 输出关键笔划。
for(int k=0;k<s;k++)
cout<<ss[1];
cout<<ss[2];
if(j<7) cout<<" "; // 在两个数字间要有一列空行。
}
}
cout<<endl;
}
}
int main()
{
//freopen("1.txt","r",stdin);
int s,n;
while(cin>>s>>n)
{
if(s==0&&n==0) break;
AC(s,n);
cout<<endl;
}
return 0;
}