显示屏输出

题目
蒜头君有一块数码管显示屏,只能显示数字。

每个数字的显示如下。

每 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;
}

猜你喜欢

转载自blog.csdn.net/qq_42403069/article/details/86512907