题目
蒜头君有一块数码管显示屏,只能显示数字。
每个数字的显示如下。
每 7 77 个数码管用来显示一个数字。
1
2
3
4
5
每个数字对应的输出如下。
| | | | | | | | | | | | | |
| | | | | | | | | | | | |
1
2
3
4
5
6
当然为了看起来更形象,可以把数字放大输出,比如放大两倍每个数字对应如下
-- -- -- -- -- -- -- --
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
– – – – – – – –
| | | | | | | | | | | | |
| | | | | | | | | | | | |
– – – – – – – –
1
2
3
4
5
6
7
8
9
输入格式
输入两个整数 k(1≤k≤10,0≤n≤99999999) k(1 \le k \le 10, 0 \le n \le 99999999)k(1≤k≤10,0≤n≤99999999),分别表达放大的倍数和需要输出的数字。
输出格式
输出数码管显示的数字,数字每一位之间用一列空格隔开。
样例输入
2 12345
样例输出
-- -- --
| | | | | |
| | | | | |
– – – –
| | | | |
| | | | |
– – –
1
2
3
4
5
6
7
样例输入
3 67890
样例输出
| | | | | | | |
| | | | | | | |
| | | | | | | |
— — —****
| | | | | | | |
| | | | | | | |
| | | | | | | |
1
2
3
4
5
6
7
8
9
题解
对于一个某个数,可以拆分为 5 个部分,即 最上面的横,上面的竖,中间的横,下面的竖和最下面的横
而竖又可以拆分为 前面的竖和后面的竖
对于横而言,水平方向多字符,对于竖而言,竖直方向多字符
#include<iostream>
#include<algorithm>
using namespace std;
// 行
void showRow(int k,string n,int len,int flag){
for(int i=0;i<len;i++){
cout<<" ";
char c;
// 最上面一行
if(flag == 0 && (n[i]=='2' || n[i]=='3' || n[i]=='5' || n[i]=='6' || n[i]=='7' || n[i]=='8' || n[i]=='9' || n[i]=='0'))
c = '-';
// 中间一行
else if(flag == 2 && (n[i]=='2' || n[i]=='3' || n[i]=='4' || n[i]=='5' || n[i]=='6' || n[i]=='8' || n[i]=='9'))
c = '-';
// 最下面一行
else if(flag == 4 && (n[i]=='2' || n[i]=='3' || n[i]=='5' || n[i]=='6' || n[i]=='8' || n[i]=='9' || n[i]=='0'))
c = '-';
else
c = ' ';
for(int j=0;j<k;j++)
cout<<c;
cout<<" ";
if(i!=len-1)
cout<<" ";
}
cout<<endl;
}
// 竖
void showLine(int k,string n,int len,int flag){
for(int line = 0;line<k;line++){
for(int i=0;i<len;i++){
// 上面的竖前面的 |
if(flag == 1 && (n[i]=='4' || n[i]=='5' || n[i]=='6' || n[i]=='8' || n[i]=='9' || n[i]=='0'))
cout<<"|";
// 下面的竖前面的 |
else if(flag == 3 && (n[i]=='2' || n[i]=='6' || n[i]=='8' || n[i]=='0'))
cout<<"|";
else
cout<<" ";
for(int j=0;j<k;j++)
cout<<" ";
// 上面的竖后面的 |
if(flag == 1 && (n[i]=='1' || n[i]=='2' || n[i]=='3' || n[i]=='4' || n[i]=='7' || n[i]=='8' || n[i]=='9' || n[i]=='0'))
cout<<"|";
// 下面的竖后面的 |
else if(flag == 3 && (n[i]=='1' ||n[i]=='3' || n[i]=='4' || n[i]=='5' || n[i]=='6' || n[i]=='7' || n[i]=='8' || n[i]=='9' || n[i]=='0'))
cout<<"|";
else
cout<<" ";
if(i!=len-1)
cout<<" ";
}
cout<<endl;
}
}
int main(){
int k;
string n;
cin>>k>>n;
int len = n.length();
for(int i=0;i<5;i++){ // 五行的结构
if(i%2==0)
showRow(k,n,len,i);
else
showLine(k,n,len,i);
}
return 0;
}