【题目链接】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; }
时间: 2024-10-12 19:23:18