P5730 【深基5.例10】显示屏

题面

思路:
建立一个三维数组
将需要输出的数字存储在字符里面,需要使用时s[i]-'0’来判断输出
if(j!=n-1)cout<<’.’;

易错:三维数组最后按规格输出:换行和.

#include<iostream>
using namespace std;
char a[10][5][3] =//a[i][j][k]表示第i个数字的第j行的第k列
{
	{//0
		'X','X','X',
		'X','.','X',
		'X','.','X',
		'X','.','X',
		'X','X','X',
	},
	{//1
		'.','.','X',
		'.','.','X',
		'.','.','X',
		'.','.','X',
		'.','.','X',
	},
	{//2
		'X','X','X',
		'.','.','X',
		'X','X','X',
		'X','.','.',
		'X','X','X',
	},
	{//3
		'X','X','X',
		'.','.','X',
		'X','X','X',
		'.','.','X',
		'X','X','X',
	},
	{//4
		'X','.','X',
		'X','.','X',
		'X','X','X',
		'.','.','X',
		'.','.','X',
	},
	{//5
		'X','X','X',
		'X','.','.',
		'X','X','X',
		'.','.','X',
		'X','X','X',
	},
	{//6
		'X','X','X',
		'X','.','.',
		'X','X','X',
		'X','.','X',
		'X','X','X',
	},
	{//7
		'X','X','X',
		'.','.','X',
		'.','.','X',
		'.','.','X',
		'.','.','X',
	},
	{//8
		'X','X','X',
		'X','.','X',
		'X','X','X',
		'X','.','X',
		'X','X','X',
	},
	{//9
		'X','X','X',
		'X','.','X',
		'X','X','X',
		'.','.','X',
		'X','X','X',
	}
};
int n;
char s[110];
int main()
{
		cin >> n;
		for (int i = 0; i < n; i++)cin >> s[i];

		for (int i = 0; i < 5; i++) 
		{//枚举每一行
			for (int j = 0; j < n; j++)
			{//枚举每一个数字
				for (int k = 0; k < 3; k++) 
				{//枚举每个数字的列
					cout << a[s[j] - '0'][i][k];
				}
				if (j != n - 1) cout << '.';//易错:如果最后一列,就不需要打印'.'
			}
			cout << endl;//易错:换行
		}
}

另一思路

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	char a[10000];
	string ans[10];
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]=='1')
		{

		ans[1]+="..X.";
		ans[2]+="..X.";
		ans[3]+="..X.";
		ans[4]+="..X.";
		ans[5]+="..X.";
		}
		if(a[i]=='2')
		{
		ans[1]+="XXX.";
		ans[2]+="..X.";
		ans[3]+="XXX.";
		ans[4]+="X...";
		ans[5]+="XXX.";
		}
		if(a[i]=='3')
		{
		ans[1]+="XXX.";
		ans[2]+="..X.";
		ans[3]+="XXX.";
		ans[4]+="..X.";
		ans[5]+="XXX.";
		}
		if(a[i]=='4')
		{
		ans[1]+="X.X.";
		ans[2]+="X.X.";
		ans[3]+="XXX.";
		ans[4]+="..X.";
		ans[5]+="..X.";
		}
		if(a[i]=='5')
		{
		ans[1]+="XXX.";
		ans[2]+="X...";
		ans[3]+="XXX.";
		ans[4]+="..X.";
		ans[5]+="XXX.";	
		}
		if(a[i]=='6')
		{
		ans[1]+="XXX.";
		ans[2]+="X...";
		ans[3]+="XXX.";
		ans[4]+="X.X.";
		ans[5]+="XXX.";
		}
		if(a[i]=='7')
		{
		ans[1]+="XXX.";
		ans[2]+="..X.";
		ans[3]+="..X.";
		ans[4]+="..X.";
		ans[5]+="..X.";
		}
		if(a[i]=='8')
		{
		ans[1]+="XXX.";
		ans[2]+="X.X.";
		ans[3]+="XXX.";
		ans[4]+="X.X.";
		ans[5]+="XXX.";
		}
		if(a[i]=='9')
		{
		ans[1]+="XXX.";
		ans[2]+="X.X.";
		ans[3]+="XXX.";
		ans[4]+="..X.";
		ans[5]+="XXX.";
		}
		if(a[i]=='0')
		{	
		ans[1]+="XXX.";
		ans[2]+="X.X.";
		ans[3]+="X.X.";
		ans[4]+="X.X.";
		ans[5]+="XXX.";
		}
	}
	for(int i=1;i<=5;i++)
	{
		ans[i]=ans[i].substr(0,ans[i].length()-1);  
		cout<<ans[i]<<endl;
	}
	return 0;
}

暴力的思路,就是将显示屏割成 5 行分开操作,每次往后面接上一段就可以了。
唯一可说的可能就是最后的去点操作。substr 函数就是复制字符串操作,其形式为 substr(开始位置,复制多长)。我们将原字符串长度用 length 求出,然后减 1,就相当于将原字符串缩短一位,也就是去掉了最后一位(也就是题中的“ . ” ),从而实现了去点的目的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值